在 读书笔记之快速排序(一)中的 代码1-3用来对一个数组进行快速排序并统计平均比较次数。如果只是想统计比较次数,就不需要对数组实际的排序。代码1-4去掉了对元素进行排序的“实际操作”,只是保留了程序中各种函数调用的框架。
- 1-4 将 Quicksort 算法的框架缩减为只进行统计
- void quicksort(int low,int high)
- {
- int m;
- if( low >= high)
- return ;
- m = randint(low ,high);
- comp += high -1;
- quickcount(low ,high -1);
- quickcount(m+1,high);
- }
在实际的程序中,数组的下标(low 和 high)是非常重要的,但在这个框架中并不重要(我们考虑的是比较次数),因此可以用一个表示数组大小的整数 n 来替代这两个下标,如代码 1-5 所示。
- 1-5 在Quicksort 代码框架中使用一个表示数组大小的参数
- void qc(int n)
- {
- int m;
- if( n <= low)
- return ;
- m = randint(low ,n);
- comp += n -1;
- qc(m-1);
- qc(n-m);
- }
现在,就可以很自然地把这个过程整理为一个统计比较次数的函数,这个函数讲返回在随机Quicksort算法中的比较次数。1-6给出了这个函数
- 1-6将 Quicksort框架实现为一个函数
- int cc(int n)
- {
- int m;
- if(n <= low )
- return 0;
- m = randint(low,n);
- return n-1 + cc(m-1) + cc(n-m);
- }
转载于:https://blog.51cto.com/020618/1176424