2013-02-23 18 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

相關問題