快速排序
来源:互联网 发布:全能视频转换器软件 编辑:程序博客网 时间:2024/06/05 04:03
时间复杂度:O(nlogn)
空间复杂度:O(1)
稳定性:不稳定
基本原理:以数组的第一个数位标志,将小于标志的数放在数组前面,大小标志的数放在数组后面。操作后将一个数放在了他在排序数组中的位置,然后对前半部分和后半部分分别重复相同操作。
ps,快排对本身基本有序的数组而言效率不高,时间复杂度会接近O(n^2)
代码:
/*大学课程中各种排序算法的实现语言:C++作者:Kylin.C*/#include<iostream>#include<vector>using namespace std;//快速排序int Partion(vector<int> &arr, int beg, int end){ if (beg < 0 || end < 0 || beg >= arr.size() || end >= arr.size()) return 0; int pirvot = arr[beg]; while (beg < end) { while (beg<end&&arr[end]>=pirvot)//应该加上等于不然会陷入死循环 --end; arr[beg] = arr[end]; while (beg < end&&arr[beg] <= pirvot)//此处同上,两处必须要有一处加等于 ++beg; arr[end] = arr[beg]; } arr[beg] = pirvot; return beg;}void QuickSort(vector<int> &arr, int beg, int end){ if (arr.size() == 0) return; if (beg < end) { int npos = Partion(arr, beg, end); QuickSort(arr, beg, npos - 1); QuickSort(arr, npos + 1, end); }}int main(){ vector<int> arr{ 4, 2, 1, 4, 3, 8, 6, 5, 6 }; QuickSort(arr,0,arr.size()-1); for (auto a : arr) cout << a << " "; cout << endl; system("pause"); return 0;}
阅读全文
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- UVa 1594 Ducci Sequence
- HDevelop实现图片中局部图形识别标记
- 移动架构07_原型模式
- 并发和OpenGL ES
- java学习之eclipse开发环境熟悉
- 快速排序
- 设计模式-策略模式
- eclipse 中创建 整合springmvc+mybatis+maven 的java web项目步骤,以及maven仓库配置
- hdu3572 建图 最大流
- 博客搬家
- Qt笔记_2
- junit 出现 initializationerror错误
- ubuntu显示右上角小键盘
- Effective Java 读书笔记(九):并发