所以我正在快速排序,我注意到一些奇怪的事情,每当我超过10个值进行排序时,排序需要很长时间,与插入排序相比。有人可以解释为什么在我要求它排序超过10个值的时候这么慢吗?也许这与代码有关。
EDIT。我做了一些更改,现在我收到了堆栈溢出错误,很棒。
public class quicksorttest{
public static void main(String args[]){
int array[] = new int[100];
for(int a =0; a<array.length;a++){
array[a] = (int)(Math.random()*100);
}
quickSort(array,0,array.length);
}
public static void quickSort(int array[],int p, int q){
if(q-p <=1);//skip
else{
int x; int i,j,k;
//let x = middle element in f[p..q-1].
x= array[(p+q/2)];
i=p;j=p;k=q;
while(j!=k){
if(array[j]==x)
j=j+1;
else if(array[j]<x){ //swap array[j] with array[i]
int temp =array[j];
array[j] = array[i]; array[i]=temp;
j=j+1;i=i+1;
}
else{//array[j]>x
//swap array[j[ with array[k-1]
int temp = array[j];
array[j] = array[k-1]; array[k-1]=temp;
k=k-1;
}
}
quickSort(array,p,i);
quickSort(array,j,q);
}
}
}
答案 0 :(得分:0)
我处理算法的方式,尤其是递归算法,是遵循以下粗略计划:
只有在重复上述操作后,才能尝试更大的数据集,然后再尝试随机数据。
在你的情况下,几乎没有小问题,但递归问题中的小问题可能会成倍增加! : - )
首先,试试上面的内容 - 如果你仍然遇到困难,可以找到一个非常好的简单实现:Bob Sedgewicks algorithm site
值得添加System.out.println语句(对于小型数据集 - 对于大型数据集来说这不太有用),或者更好地使用调试器(IntelliJ,Eclipse,Netbeans等)进行操作