快速排序Quicksort
来源:互联网 发布:淘宝直播大v通道 编辑:程序博客网 时间:2024/05/01 16:07
快速排序
原理: 快速排序使用分治策略把一个序列根据轴点(pivot)分成两个子序列。步骤为:
1 从序列中挑出一个元素,作为轴点pivot。
2 把所有比轴点小的放在左序列,比轴点大的放在右序列(partition操作)。
3 对每个分区递归地进行步骤1-3,递归的结束条件是序列大小小于2。
整个问题的关键在于如何根据轴点进行partition操作。
复杂度分析
最坏情况时间复杂度:
每次选取的基准都是最大(小)的元素,导致每次只划分了一个子序列,需要进行n-1次划分才能结束递归,时间复杂度为
最好情况时间复杂度:
每次选取的基准都能使划分均匀,只需要logn次划分就能结束递归
平均时间复杂度:
空间复杂度:
主要是递归造成的栈空间的使用(用来保存left和right等局部变量),取决于递归树的深度。
稳定性:不稳定
code:
int partition(vector<int> &vec, int lo, int hi){ swap(vec[lo], vec[lo+rand()%(hi-lo+1)]);//随机交换 int pivot = vec[lo]; while(lo<hi) { while(lo<hi && pivot <= vec[hi]) //向左拓展右侧序列 hi--; vec[lo] = vec[hi]; //小于轴点的归入左侧序列 while(lo<hi && pivot>vec[lo]) lo++; vec[hi] = vec[lo]; } vec[lo] = pivot; return lo;}void Quicksort(vector<int> &vec,int lo, int hi) //区间左闭右开{ if(hi - lo<2) return; int mi = partition(vec,lo,hi-1); //partition参数为闭区间 Quicksort(vec,lo,mi); Quicksort(vec,mi+1,hi);}
0 0
- 快速排序(quicksort)
- QuickSort(快速排序)
- 快速排序(quicksort)
- 快速排序QuickSort
- 快速排序(QuickSort)
- QuickSort(快速排序)
- 快速排序(quickSort)
- 快速排序(Quicksort)
- 快速排序 QuickSort
- 快速排序QuickSort.c
- Quicksort 快速排序源程序
- QuickSort 快速排序
- quicksort快速排序
- quicksort快速排序
- (C#)快速排序 Quicksort
- 快速排序算法QuickSort
- 快速排序(QuickSort)
- 快速排序(QuickSort)
- 一键设置L2TP脚本-Ubuntu14.04LTS
- 第六单元
- 工厂模式
- MySQL 用户规划及权限设置
- Mysql 闲杂问题聚集
- 快速排序Quicksort
- eclipse设置代码自动提示
- SQL语句优化(查询优化)
- 照片多选
- VERSION { version-script-commands }
- SpringMVC框架
- Mysql 5.7系列的安装配置-Windows
- Django 入门学习规划与资料推荐
- 进阶文章体系