学习了算法第四版上面的快速排序,看到书上写的是选最左边的元素做主元,运行时间正常,最近又从网上看到另一种主元取法,就是将当前序列最右边那个元素作为主元,我尝试了一下,算法最下面给出。
说明一下less()方法的作用是返回一个布尔值,如果左边那个参数小于右边那个参数就返回true。还有exch()方法是交换数组L上第一个参数和第二个参数位置的两个元素。
然后使用计时器记录了一下这个我自己写的快排和书上那个选择左侧主元的快排,两者运行时间居然天差地别,我写的快排慢了书上那个大概600多倍....
现在我只想知道什么因素或者说哪里写的有问题导致了运行时间可以这么长,求知道的大佬指点一番。 private static int partition(Comparable[] l,int lo,int hi){
int i=-1,j=hi;
Comparable pivot=l[hi];
while(true){
while(less(l[++i],pivot));
while(less(pivot,l[--j]))if(j==lo)break;
if(i>=j)break;
exch(l,i,j);
}
exch(l,hi,i);
return i;
}
private static void sort(Comparable[] l,int lo,int hi){
if(lo>=hi)return;
int i=partition(l,lo,hi);
sort(l,lo,i-1);
sort(l,i+1,hi);
}