2013-02-11 25 views
0

我是新來的編程和Java,我想了解一個代碼,實現「quickSort」算法排序數組。
現在..我明白快速排序的基本思想,所以問題主要是關於代碼本身。 (分區()方法)我們有一個主循環(同時(我< = j))和兩個循環裏面,而不是另一個決定。我不明白的是,在主循環的每次迭代中,循環下方的交換決定都沒有執行,這是什麼原因。簡單地說,在最後一個循環之後(while(arr [j]> pivot)j--;)爲什麼下面的條件不被執行?他們做j ++,而不是代碼應該在循環之外移動,不是嗎?正如我從這個例子中所理解的那樣......它並不是!QuickSort代碼示例。需要一點澄清

這裏是我講的是代碼:

public class QuickSort { 

    public static int list[] = {1,56,7,34,1,1,4,25,100,85,250}; 

    public static int partition(int arr[],int left,int right){ 

     int i = left; 
     int j = right; 
     int tmp; 
     int pivot = arr[(left + right)/2]; 

     while(i<=j){ 
      while(arr[i]<pivot){ 
       i++; 
      } 
      while(arr[j]>pivot){ 
       j--; 
      } 
      if(i<=j){ 
       tmp = arr[i]; 
       arr[i] = arr[j]; 
       arr[j] = tmp; 
       i++; 
       j--; 
      } 
     } 
     return i; 
    } 


    public static void quickSort(int arr[],int left,int right){ 
     int index = partition(arr,left,right); 
     if(left<index-1){ 
      quickSort(arr,left,index-1); 
     } 
     if(index<right){ 
      quickSort(arr,index,right); 
     } 
    } 
+0

你說「他們做j ++,而不是代碼應該在循環之外移動,不是嗎?」。在這段代碼中我沒有看到j ++,那麼你究竟在說什麼代碼的一部分? – 2013-02-11 03:04:41

回答

0

如果我理解你的問題的權利,你只是在談論分區循環的最後迭代。

如果是這種情況,交換區塊不執行的原因僅僅是因爲if條件不再成立,因爲我停止了j的右邊一個位置。