快速排序法
来源:互联网 发布:淘宝网ipad保护套 编辑:程序博客网 时间:2024/06/18 14:19
摘自百度百科
快速排序(Quicksort)是对冒泡排序的一种改进。
通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,
然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列。
一趟快速排序的算法是:
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j–),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,
使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。
另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
快速排序的网址给的不错:
https://baike.baidu.com/item/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/369842?fr=aladdin
void sort(int *a,int left,int right){ if(left>right)/*如果左边索引大于右边的索引就代表完成一个组**/ { return; } int i = left; int j = right; int key = a[left]; while(i<j) //控制在当组内寻找一遍 { while(i<j&&key<=a[j]) /* 而寻找结束的条件就是,1,找到一个小于或者大于key的数 (大于或小于取决于你想升序还是降序) 2.没有符合条件的,并且i与j的大小没有反转 */ { j--; } a[i] = a[j] /*找到一个这样的数后就把它赋给前面被拿走的i值(如果第一次循环且key是a[left],那么就给key)*/ while(i<j&&key>=a[i]) /*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反, 因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/ { i++; } a[j] = a[i]; } a[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/ sort(a, left, i - 1);/*最后用同样的方式对分出来的左边的小组进行同上的做法*/ sort(a, i + 1, right);/*用同样的方式对分出来的右边的小组进行同上的做法*/ /*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/}
阅读全文
0 0
- 排序--快速排序法
- 【排序】快速排序法
- 快速排序法排序
- 排序算法--快速排序法
- 排序算法--快速排序法
- 快速排序法
- 快速排序法
- 快速排序法
- 快速排序法
- 快速排序法qsort
- java快速排序法
- 通用快速排序法
- 快速排序法
- 快速排序法程序
- 快速排序法
- 快速排序法
- 快速排序法
- 快速排序法
- 异步打印日志的配置
- tomcat配置https协议
- 云控源码的重要性
- Java并发编程
- delphi关于 "高位" 与 "低位"
- 快速排序法
- HDU 2896-病毒侵袭
- 记一次慢查询优化
- == 与 equals() 的区别
- LeetCode456 132Pattern
- Kotlin计算器代码
- 2017第九届中国(深圳)国际物联网博览会会刊(参展商名录)
- 【技术实验】表格存储Tablestore准实时同步数据到Elasticsearch
- C++——算24(一种简单的穷举4个元素的所有排列的方法)