快速排序(快排)算法的C++两种实现
2013-03-30 19:29
429 查看
快排算法在分治的时候有两种实现,一种实现是从两边到中间(partition),另一种实现是从一边到另一边(partition2)。我用一个100000数组测试发现前一种实现运行速度快一些。
这两种的C++实现如下: (注:我用的代码风格是gnu的代码风格)
这两种的C++实现如下: (注:我用的代码风格是gnu的代码风格)
bool sort::qsort(int *ini, int start, int end) { // sort the array ini by ascending order int tmp=0; int mid=0; if (end < start){ return false; }else if(end == start){ if(ini[start] > ini[end]) { tmp = ini[start]; ini[start] = ini[end]; ini[end] = tmp; } return true; }else{ // when start is less end; mid = this->partition2(ini, start, end); // the partition fun. can either be partiton or partiton2. if(mid == start && qsort(ini,mid+1,end)) return true; if( mid == end && qsort(ini,start,mid-1)) return true; if(qsort(ini,start,mid-1) && qsort(ini,mid+1,end)) return true; return true; } } int sort::partition(int *ini, int start, int end) { // the main body for partition which from edge to middle int key=0; int i=start; int j=end; int tmp = 0; key = ini[i]; while(i!=j) { while(key <= ini[j] && i < j) j--; // exchange value, from right to left tmp = ini[i]; ini[i] = ini[j]; ini[j] = tmp; while(key >= ini[i] && i < j) i++; // exchange value, from left to right tmp = ini[i]; ini[i] = ini[j]; ini[j] = tmp; } return i; } int sort::partition2(int *ini, int start, int end) { // the main body for partition which from end to begin int key = ini[end]; int i = start - 1; // suppose the mid pos is i+1 int j=start; int tmp = 0; for(;j<end;j++) { if(ini[j] < key ) { i++; tmp = ini[i]; ini[i] = ini[j]; ini[j] = tmp; } } ini[end] = ini[i+1]; ini[i+1] = key; return i+1; }
相关文章推荐
- hdu 1233 还是畅通工程(最小生成树的Prim和Kruskal两种算法的c++实现)(prim算法详解)
- 算法代码实现之归并排序,C/C++实现,自顶向下与自底向上两种方式
- 不同高度墙的盛水问题两种算法C++实现
- 【C/C++】快速排序的两种实现思路
- 算法设计之快速排序的实现 (C++实现)
- 【算法和数据结构】排序(四)归并排序和快速排序(C++实现)
- 【算法导论】用C++实现快速排序
- C++ 快速排序实现(算法导论)
- 算法设计之快速排序的随机化版本 (C++实现)
- hdu 1233 还是畅通工程(最小生成树的Prim和Kruskal两种算法的c++实现)(prim算法详解)
- [算法导论] 快速排序以及最大堆的C++实现
- 初学算法-快速排序与线性时间选择(Deterministic Selection)的C++实现
- C++快速排序实现(quicksort) (算法导论)
- 图的深度优先搜索和广度优先搜索算法、最小生成树两种算法 --C++实现
- 【算法导论】c++实现的随机化的快速排序
- 快速排序及其改进算法C++实现
- 用C++实现单链表的创建、逆置和输出 的两种方法
- 基于三次Bezier原理的曲线拟合算法C++与OpenCV实现
- 【C++实现有序子序列合并算法】
- 经典算法之快速排序的C实现方法