第七章快速排序之“快速排序Hoare版本HOARE-QUICKSORT”(思考题7-1)
2012-01-05 22:05
447 查看
这是个历史更早的版本,Hoare是人名,这个版本的Partition()函数跟现在的不一样。我觉得这个老版本不如现在的版本好理解,大面上看起来可能好理解,但是具体写代码时考虑指针移动,很麻烦。
#include <string.h> #include <time.h> #define BUFFER_SIZE 10 int HoarePartition(int *a,int p,int r) { int tmp=0; int i=0; int j=0; int x=0; i=p; j=r; x=a[p]; while(1) { while(a[j]>x) { j--; } while(a[i]<x) { i++; } if(i<j) { tmp=a[i]; a[i]=a[j]; a[j]=tmp; } else { return i; } } } void HoareQuickSort(int *a,int p,int r) { int q=0; if(p<r) { q=HoarePartition(a,p,r); HoareQuickSort(a,p,q-1); HoareQuickSort(a,q+1,r); } } int main() { int i=0; int j=0; int a[BUFFER_SIZE]; //随机生成数组 srand((unsigned)time(NULL)); for(j=0;j<BUFFER_SIZE;j++) { a[j]=rand()%100; } printf("随机生成的数组:\n"); for(i=0;i<BUFFER_SIZE;i++) { printf("%d ",a[i]); } printf("\n"); HoareQuickSort(a,0,BUFFER_SIZE-1); printf("对数组进行快速排序:\n"); for(i=0;i<BUFFER_SIZE;i++) { printf("%d ",a[i]); } system("pause"); return 0; }
相关文章推荐
- 第七章快速排序之“快速排序的随机化版本RANDOM-QUICKSORT”
- 第七章快速排序之“采取“尾递归”和“三数取中”技术的快速排序”(思考题7-4、7-5)
- 读书笔记 算法导论 快速排序 QuickSort 使用最后一个元素作为pivot
- 快速排序Quicksort Array in Java
- 快速排序 QuickSort
- 快速排序与二分查找算法Javascript版本
- 排序算法(五)快速排序多种版本
- quicksort 快速排序 java
- 算法导论第七章例题——快速排序
- 快速排序的随机化版本
- 算法导论第七章-快速排序-Cpp代码实现
- 快速排序 quicksort
- 快速排序(数组和链表版本)
- 算法第四版学习笔记之快速排序 QuickSort
- 算法导论 第七章快速排序与随机快速排序
- 快速排序实现细节的思考
- 快速排序quicksort的实现与分析
- DualPivotQuicksort两枢轴快速排序
- 快速排序的C#实现以及,算法导论上之后一个习题的思考
- 快速排序quicksort-算法导论java实现