排序算法之快速排序
来源:互联网 发布:天猫推荐算法大赛数据 编辑:程序博客网 时间:2024/06/10 16:54
快速排序
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。——快速排序.维基百科
(图片引自维基百科)
个人理解的快速排序算法:欲对序列data[]作快速排序,1)将data[]的第一个元素(上图为最后一个元素)存为key;2)通过赋值,一轮调整将所有小于key的元素调整至key的左边,将所有大于key的元素调整至key的右边;3)用递归的方法分别对key左边与右边的子序列作快速排序;4)函数出口为:子序列最多只有一个元素。
函数代码:
/* *快速排序 */void QuickSort(int data[], int low, int high){/* 快速排序data[low..high) *//* 每一轮对序列的调整,使得所有大于第一个元素key的元素位于key的右边, *//*以及所有小于key的元素位于key左边 *//* 最后分别对key左右两边的子序列作快速排序 */if (high - low < 2){/* 单元素区间 */return;}int key = data[low];/* 保存第一个元素 */int i = low, j = high - 1;while (i < j){while (i < j && key <= data[j]){/* 逆序寻找小于key的元素 */j--;}if (i < j){/* 将小于key的元素调整至key左边 */data[i++] = data[j];}while (i < j && data[i] <= key){/* 顺序寻找大于key的元素 */i++;}if (i < j){/* 将大于key的元素调整至key右边 */data[j--] = data[i];}}//while (i < j)data[i] = key;/* 将key置于正确位置 */QuickSort(data, low, i);QuickSort(data, i + 1, high);}
0 0
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法 之 快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 如何判断一个类是否支持某属性和方法以及如何判断IOS的版本
- SQL Server 2005中的窗口函数
- IOS解决某些第三方静态库在真机无法运行的问题
- 网络通信框架Volley使用详细说明
- eclipse jee 和 myeclipse web项目的转换
- 排序算法之快速排序
- 写一个Dalvik版的Hello World
- XCode环境变量及路径设置 $(SRCROOT)/[文件夹名称]
- JS getYear在firefox下有问题解决方案
- 让我们共同构筑物联网起飞的平台:物联网操作系统Hello China寻求应用合作伙伴
- Android 复杂Listview的显示,仿金山手机助手程序卸载界面
- 硬盘中的文件中毒了要怎么恢复
- 让你懂得职场的经典话语
- CentOS中vsftp安装与配置