算法导论 - QuickSort 快速排序 C++实现
来源:互联网 发布:殷都区水冶镇豫广网络 编辑:程序博客网 时间:2024/05/01 02:43
算法导论的快速排序还和一般书上的快速排序是有点不一样的。
当然书习题也给出了一般快速排序的方法,其分区函数学名叫Hoare partition。
书本介绍的排序可以用图看的很清晰:
然后配合C++程序,就不需要废话就能明白了:
//C++'s array range should be [low, up], the same as [low, up+1)int partition(vector<int> &vi, int low, int up){int pivot = vi[up];int i = low-1;for (int j = low; j < up; j++){if(vi[j] <= pivot){i++;swap(vi[i], vi[j]);}}swap(vi[i+1], vi[up]);return i+1;}
他的quick sort程序也很明了,值得注意到的地方就是,mid是已经到了最终排序位置的了,所以,不需要递归考虑这个位置了。
//C++'s array range should be [low, up], the same as [low, up+1)void quickSort(vector<int> &vi, int low, int up){if(low < up){int mid = partition(vi, low, up);//Watch out! The mid position is on the place, so we don't need to consider it again.//That's why below is mid-1, not mid! Otherwise it will occur overflow error!!!quickSort(vi, low, mid-1);quickSort(vi, mid+1, up);}}
增加一个adaptor功能函数:
void qSort(vector<int> &vi){quickSort(vi, 0, vi.size()-1);}
最后是测试主函数:
int main(){int a[] = {3,5,7,9,2,3,1,0,7,5,4};vector<int> va(a, a+11);cout<<"Before quicksort:\n";for(auto x:va)cout<<x<<" ";cout<<endl;qSort(va);cout<<"After quicksort:\n";for(auto x:va)cout<<x<<" ";cout<<endl;system("pause");return 0;}
结果:
- 算法导论 - QuickSort 快速排序 C++实现
- 快速排序quicksort-算法导论java实现
- 算法导论-------快速排序QuickSort
- QUicKSort 快速排序算法 c实现
- C++快速排序实现(quicksort) (算法导论)
- 【算法导论-010】快速排序(quickSort)
- 算法导论 第七章:快速排序(Quicksort)
- 算法导论学习--快速排序--Quicksort
- 快速排序(quicksort)算法实现
- 快速排序(quicksort)算法实现
- 算法导论C语言实现: 快速排序
- 算法导论上的quicksort实现 快速排序的随机化版本
- QuickSort - 快速排序算法(C++)
- QuickSort - 快速排序算法(C++)
- C++实现快速排序算法QuickSort()
- JavaScript快速排序算法QuickSort实现
- Java快速排序(QuickSort)算法实现
- JavaScript快速排序算法QuickSort实现
- android 屏幕 分辨率
- Missing Hive Builtins Jar: /data/hive-0.11.0/lib/hive-builtins-*.jar
- atoi,itoa,sprintf等函数的实现
- ubuntu 卸载 Cario-Dock
- codeforces 258-E. Little Elephant and Tree 线段树,离线
- 算法导论 - QuickSort 快速排序 C++实现
- 自定义通用型空间配置器
- C++版基本算法4-哈希查找
- QR code资料
- 今天来签到
- 学习计算机知识
- android DOM 解析 网络上xml文档
- 10299 Problem A: Modular Fibonacci(斐波那契的矩阵快速幂)
- 集成ffmpeg/x264:ERROR: libx264 not found的问题