2013-02-23 77 views
1

所以我在快速排序时玩弄了一些东西,并且我发现了一些奇怪的东西,任何时候我会超过10个值进行排序,排序需要很长时间,相比之下像插入排序。有人可以解释为什么它如此缓慢,只要我要求它分类超过10个值?也许这与代码有关。无法理解为什么我的排序算法如此之慢

编辑。我做了一些改变,现在我得到堆栈溢出错误,太棒了。

 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); 

    } 
    } 
} 
+2

请修复您的缩进。 – 2013-02-23 18:47:45

+1

使用eclipse(或任何您使用的)调试器并逐步执行代码。这应该很容易看出为什么你的算法需要很长时间才能完成。 – Michael 2013-02-23 18:50:47

+0

对不起,关于缩进。我从来没有真正钻研过调试器,但我会试一试。 – Strobes 2013-02-23 18:52:17

回答

0

我接近算法的方式,尤其是递归算法是遵循以下粗略的计划:

  • 开始与空数组
  • 尝试一个阵列,1元
  • 尝试使用2个元素的数组(这些前三个很重要,因为它们通常是递归方法的最终状态)
  • 尝试使用3或4个元素的数组,但尝试使用相同的设置一段时间,以便可以重现您的结果。如果你得到一个失败与一组随机的,但它可以在下次运行你可能不知道你是否已经解决了问题,或者是你试图

数据只有当你有以上的工作应该反复你尝试更大的数据集,然后尝试随机数据。

在你的情况下,有一些小问题,但递归问题中的小问题可以乘以! - :-)

首先,尝试上面,如果你还卡住了一个非常好的简单的FPGA实现上可以找到:Bob Sedgewicks algorithm site

它的价值将System.out.println语句(对于小数据集 - 对于大型应用程序来说,这样做不太有用),或者更好地通过调试器(IntelliJ,Eclipse,Netbeans等)进行调试。

+0

谢谢你的输入:) – Strobes 2013-02-23 19:55:52

+0

所以我可以得到它与小数据集的工作,但是当我上面我得到arrayindexoutofbounds错误 – Strobes 2013-02-23 20:36:01