标签:
传说中最快的排序算法。没有一种排序算法在任何情况下是最好的。
快速排序和归并排序有相同的策略,就是分而治之。分而治之就会用到递归。、
递归要有一个最小的集合。
主元 怎么选,决定了算法简单不简单。
什么是快速排序算法的最好情况? B. 每次正好中分
下面是快速排序的最好情况:
选住院的方法:
1、选取第一个
2、随机取,rand()函数不便宜啊- -!
3、取数列的中位数
算法1:选取第一个
算法2:取数列的中位数
当我们讲指针的时候,不是C语言里面的指针,只是记录元素的位置。
pivot主元要和 i 换位置,
快速排序为什么快呢,每一次他选定一个主元以后,主元是被放到了最终的正确的位置上
如果有元素正好等于pivot怎么办?
1、停下来交换?
2、不理它,继续移动指针?
我们举个极端的例子,元素里面全是和主元相同的。那么我们怎么办?最后主元停在数组的中间位置。这么做的好处,每一次递归的时候原始数列就被分两个等长的数列,这样的时间复杂度是NlogN的
如果不理它,每一次子集划分的时候我的主元放在某一端点的,那样时间复杂度是N2了。所以还是停下来交换吧。
快速排序的标准接口应该怎么写? Quicksort( A, 0, N-1 );
标签:
原文地址:http://www.cnblogs.com/zrui513/p/4773561.html