QuickSort 快速排序
2017-03-23 17:22
686 查看
快速排序算法:
思路:在QSort函数中,设置一个枢轴pivot,Partition函数中选择第一个数当作枢轴变量,经过循环交换,使得它左边的值都比它小,右边的值比它大;然后再递归调用QSort函数。
注:在最优的情况下,时间复杂度变O(nlogn);在最坏的情况下,时间复杂度为O(n^2)。空间复杂度为O(logn)。由于关键字的比较和交换是跳跃式进行的,因此,快速排序是一种不稳定的排序方法。
代码实现:
//快速排序(排序后为从小到大) #include <iostream> #include <algorithm> using namespace std; int Partition(int *p, int low, int high){ int pivotkey; pivotkey = *(p + low);//设置传进来的数组中第一个数为枢轴变量 while (low < high){ while (low < high&&*(p + high) >= pivotkey){//如果low<high,且*(p+high)>=枢轴变量,则--high --high; } swap(*(p + low), *(p + high));//交换值 while (low < high&&*(p + low) <= pivotkey){ ++low; } swap(*(p + low), *(p + high)); } return low;//返回枢轴 } void QSort(int *p,int low,int high){ int pivot;//设置枢轴,即在这个位置,它左边的值比它小,右边的值比它大 if (low < high){ pivot = Partition(p+low, 0, high-low);//用来初步排序 QSort(p+low, 0, pivot -1-low);//递归调用自己,这里传的p+low,是新截断数组第一个位置的指针,所以后面的要用0t pivot-1-low QSort(p + pivot + 1, 0, high - pivot - 1); } } void QuickSort(int (&a)[9]){ int asize = sizeof(a) / sizeof(a[0]);//取数组的大小 int *p = a;//指针p指向a的首地址 QSort(p, 0, asize - 1); } int main(){ int a[] = { 5, 1, 9, 3, 7, 4, 8, 6, 2 }; cout << "before sorted:" << endl; for (size_t i = 0; i < 9; ++i){//输出 cout << a[i] << " "; } cout << endl; QuickSort(a); cout << "after sorted:" << endl; for (size_t i = 0; i < 9; ++i){//输出 cout << a[i] << " "; } cout << endl; return 0; }
运行结果:
相关文章推荐
- 快速排序 QuickSort Java代码
- 快速排序——QuickSort
- 快速排序QuickSort
- 快速排序测试(QuickSort)
- (C#)快速排序 Quicksort
- quickSort - 快速排序
- Java 快速排序 quicksort
- 这个代码怎么改??Help快速排序 quicksort
- 快速排序(quicksort)
- 第七章快速排序之“快速排序Hoare版本HOARE-QUICKSORT”(思考题7-1)
- 快速排序quicksort的实现与分析
- 快速排序(Quicksort)探微 之 大牛
- QuickSort快速排序
- 快速排序 quicksort
- 【数据结构】快速(QuickSort)排序之——挖坑法
- 快速排序——QuickSort——Python
- 快速排序,quickSort
- 算法第四版学习笔记之快速排序 QuickSort
- Python--递归和快速排序 -- quickSort
- 快速排序Quicksort Array in Java