快速排序算法总结
2015-12-08 22:20
309 查看
有了上一篇的区间划分以后,快速算法就比较容易实现,快速算法是一种原地排序算法,最坏情况下是O(n*n),平均时间是O(lgn)。其原理:通过区间划分,不断递归,最后只有一个元素,则已经排好序。所以采用分治法,但并不需要合并,因为两个子数组是就地排序的。代码如下:
p代表排序的初始下标,total为最终下标。注意,是下标,不是大小。
void Insert::QuickSort(vector<int> &coll,int p,int total) { if(p<total) { int q=Partition(coll,p,total); QuickSort(coll,p,q-1); QuickSort(coll,q+1,total); } } int Insert::Partition(vector<int> &coll,int p,int total) { int left=p-1,right=0,temp=0; int pivot=coll[total];//主元,主元只用于比较,不用于迭代 for(right=p;right<total;++right) { if(coll[right]<pivot) { ++left; temp=coll[left]; coll[left]=coll[right]; coll[right]=temp; } } coll[total]=coll[++left]; coll[left]=pivot; return left; }
p代表排序的初始下标,total为最终下标。注意,是下标,不是大小。
相关文章推荐
- 使用 IntelliJ IDEA 开发 Android 应用程序时配置 Allatori 进行代码混淆
- Openwrt笔记
- ERR_NAME_NOT_RESOLVED错误的解决
- OC - 第七章 类的扩展: 类目Category, 延展Extension, 协议Protocol ( 二 )
- RTEMS开发环境搭建——基于FreeBSD系统
- iOS技术面试03:Foundation
- ERROR BUILDING VIM on Ubuntu--Solution
- zzulioj 1810: water problem II (字符转换) 水
- dubbo负载均衡策略--- 一致哈希算法
- Android Studio——自定义ListView子项目布局
- STM32学习笔记(3):时钟配置
- Scala 第十六讲 隐函数 从大数据菜鸟走上大师的历程
- 如何更好的通过Inflate layout的方式来实现自定义view
- lct模板
- Url Protocol-从网页中打开应用程序(exe)-使用小记
- 在eclipse中怎样给项目添加关联项目
- 单点登录SSO
- iOS技术面试02:内存管理
- 我与太极拳
- db2注意事项