第七章快速排序之“快速排序的随机化版本RANDOM-QUICKSORT”
2012-01-05 17:13
567 查看
因为快速排序的最坏情况是O(n^2),最佳情况是O(nlgn),采用随机化版本时间复杂度可以达到平均情况O(nlgn)。
书上的证明过程让人心静、让人谦卑,its amazing!比起那些让人拍案叫绝的证明过程,用代码实现反而不是最重要的了。
书上的证明过程让人心静、让人谦卑,its amazing!比起那些让人拍案叫绝的证明过程,用代码实现反而不是最重要的了。
#include <string.h> #include <time.h> #define BUFFER_SIZE 10 int Partition(int *a,int p,int r) { int i=0; int j=0; int tmp=0; int x=0; x=a[r]; i=p-1; for(j=p;j<r;j++) { if(a[j]<=x) { i++; tmp=a[i]; a[i]=a[j]; a[j]=tmp; } } tmp=a[i+1]; a[i+1]=a[r]; a[r]=tmp; return i+1; } int RandomPartition(int *a,int p,int r) { int i=0; int tmp=0; srand((unsigned)time(NULL)); i=rand()%(r-p+1)+p; tmp=a[i]; a[i]=a[r]; a[r]=tmp; return Partition(a,p,r); } void RandomQuickSort(int *a,int p,int r) { int q=0; if(p<r) { q=RandomPartition(a,p,r); RandomQuickSort(a,p,q-1); RandomQuickSort(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"); RandomQuickSort(a,0,BUFFER_SIZE-1); printf("对数组进行随机化快速排序:\n"); for(i=0;i<BUFFER_SIZE;i++) { printf("%d ",a[i]); } system("pause"); return 0; }
相关文章推荐
- 算法导论-第七章-快速排序:随机化快速排序C++实现
- 基本排序方法及分析(九):Randomized-Quicksort快速排序的随机化版本
- 第七章快速排序之“快速排序Hoare版本HOARE-QUICKSORT”(思考题7-1)
- 算法实践篇-快速排序-随机化版本
- 算法导论 第七章快速排序与随机快速排序
- 快速排序的随机化版本代码
- 快速排序之随机化版本(7)
- 快速排序随机化版本
- 《算法导论》笔记 第7章 7.3快速排序的随机化版本
- 算法导论-排序(二)快速排序、随机化快速排序
- 《算法导论》笔记 第7章 7.3快速排序的随机化版本
- 第七章快速排序之“采取“尾递归”和“三数取中”技术的快速排序”(思考题7-4、7-5)
- 快速排序随机化版本
- 每日编程3之快速排序随机化版本
- 快速排序的随机化版本
- 快速排序的随机化版本
- 快速排序学习2(随机化版本)
- CLRS 7.3快速排序的随机化版本
- 算法导论7.3快速排序的随机化版本
- 算法导论 第七章快速排序与随机快速排序