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