快速排序(Quick Sort)C语言
已知数组 src 如下:
[5, 3, 7, 6, 4, 1, 0, 2, 9, 10, 8]
快速排序1
在数组 src[low, high] 中,取 src[low] 作为 关键字(key) 。
通过 一趟快速排序 找到 key 的位置 keypos 。
keypos 将数组划分为两部分: src[low, keypos - 1] 和 src[keypos + 1, high]。
src[low, keypos - 1] 中的元素都 不大于 key 。
src[keypos + 1, high] 中的元素都 不小于 key 。
一趟快速排序 步骤如下:
1、定义两个指针 left 和 right , 初值为 low 和 high 。
2、定义关键字 key , 初值为 src[low] 。
3、 right 向前搜索,找到第 1 个 小于 key 的元素时,将 src[left] 和 src[right] 互换。
4、 left 向后搜索,找到第 1 个 大于 key 的元素时,将 src[left] 和 src[right] 互换。
5、 重复 3,4,直到 left = right 时结束。
快速排序2
通过上面的步骤可以发现,我们互换的数据有 1 个是关键字,但是关键字我们已经记录在 key 中,所以不需要将关键字不停的互换。只需要将另一个值移动即可。
快速排序2(C代码)
/*********************************************************************
Function: 快速排序2
Description:将数组src[low,high]升序排序
Parameters: src: 待排序数组
low: 起始下标
high: 结束下标
Return Value: 排序完成返回0,否则-1
Author: wowpH
Date: 2019-11-12 21:57:42
Reference: 数据结构(C语言版)严蔚敏 吴伟民 清华大学出版社
From: https://www.cnblogs.com/wowpH/p/11905926.html
*********************************************************************/
int quick_sort_two(int src[], int low, int high) {
if (low < 0 || low >= high) {
return -1;// 下标不合法
}
int key = src[low];// 将第1个作为关键字
int left = low;// 左边界
int right = high;// 右边界
while (left < right) {// 两端交替向中间扫描
// 在右边查找比关键字小的数据
while (left < right && src[right] >= key) {
--right;
}
src[left] = src[right];// 将比关键字小的移动到左边
// 在左边查找比关键字大的数据
while (left < right && src[left] <= key) {
++left;
}
src[right] = src[left];// 将比关键字大的移动到右边
}
src[left] = key;// 此时left就是一趟快速排序后的关键字所在的位置
quick_sort_two(src, low, left - 1);// 对左边的数据递归排序
quick_sort_two(src, left + 1, high);// 对右边的数据递归排序
return 0;
}
快速排序视频:https://v.qq.com/x/page/w3021nsi4bi.html
原文链接:https://www.cnblogs.com/wowpH/p/11905926.html
- End - wowpH - pfdvnah -
快速排序(Quick Sort)C语言的更多相关文章
- [算法] 快速排序 Quick Sort
快速排序(Quick Sort)使用分治法策略. 它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分:其中一部分的所有数据都比另外一部分的所有数据都要小.然后,再按此方法对这 ...
- 基础排序算法之快速排序(Quick Sort)
快速排序(Quick Sort)同样是使用了分治法的思想,相比于其他的排序方法,它所用到的空间更少,因为其可以实现原地排序.同时如果随机选取中心枢(pivot),它也是一个随机算法.最重要的是,快速排 ...
- 快速排序Quick sort
快速排序Quick sort 原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归 ...
- Java中的经典算法之快速排序(Quick Sort)
Java中的经典算法之快速排序(Quick Sort) 快速排序的思想 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对 ...
- quicksort 快速排序 quick sort
* Java基本版 package cn.mediamix; import java.util.LinkedList; public class QuickSort { public static v ...
- 排序算法 - 快速排序(Quick Sort)
算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod). (1) 分治法的基本思想 ...
- 快速排序算法回顾 --冒泡排序Bubble Sort和快速排序Quick Sort(Python实现)
冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字.以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止 ...
- 基础算法之快速排序Quick Sort
原理 快速排序(Quicksort)是对冒泡排序的一种改进. 从数列中挑出一个元素,称为"基准"(pivot); 排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的 ...
- 快速排序——Quick Sort
基本思想:(分治) 先从数列中取出一个数作为key值: 将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边: 对左右两个小数列重复第二步,直至各区间只有1个数. 辅助理解:挖坑填数 初 ...
- 排序:快速排序Quick Sort
原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序 ...
随机推荐
- luogu_4317: 花神的数论题
花神的数论题 题意描述: 设\(sum(i)\)表示\(i\)的二进制数中\(1\)的个数. 给定一个整数\(N\),求\(\prod_{i=1}^Nsum(i)\). 输入描述: 输入包含一个正整数 ...
- Xamarin.Forms快速入门-深入探讨
官网链接 项目介绍 以Notes项目为例,The Notes application consists of one solution containing four projects, as sho ...
- 关于C++中extern的简单笔记
extern可以实现多文件共享同一个变量.const常量.函数. 下面结合几个例子来讲一下extern的相关性质(下述皆为多文件编译): 例1: //file1.cpp #include<ios ...
- navicat提示无法连接解决办法
1.错误如下图: 2.这个是由于mysql中user表中未设置允许该ip访问导致,解决办法: 1)查下user表:select user,host from user; 这张表就是mysql.user ...
- jquery实现select数据回显
[html] view plain copy <select class="div_select_re" id="edit_technicalGrade&q ...
- Spring 注解@Value详解
一.spring(基础10) 注解@Value详解[1] 一 配置方式 @value需要参数,这里参数可以是两种形式: [html] view plain copy @Value("#{co ...
- JetBrains套装免费学生授权申请(IntelliJ, ReSharper, WebStorm...)
IntelliJ作为一款强大的Java开发IDE,售价自然也不会低.但是对于学生或教师来说,JetBrains开发工具免费提供给学生和教师使用.而且取得一次授权后只需要使用相同的 JetBrains ...
- 让ie10/11支持非单页面的vue/es6
为了满足某些客户的要求,最近让前端同学实现了ie 10(windows 7)/11(windows 10)支持多页面的vue/es6,基本参考如下: https://www.cnblogs.com/n ...
- 前端知识点回顾之重点篇——CSS中flex布局
flex布局 来源: http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool 采用 Flex 布局的元素 ...
- SQL存储实现将JSON自动转化成SQL数据列
CREATE PROCEDURE sp_GetJsonFields ( @Json VARCHAR(MAX) ) AS BEGIN SELECT @Json=REPLACE(@Json,'{','') ...