私はプログラミングとJavaが初めてで、配列をソートするための「quickSort」アルゴリズムを実装するコードを理解しようとしています。
今..クイックソートの基本的な考え方を理解したので、質問は主にコード自体に関するものです。
以下のコード (partition() メソッド) では、メイン ループ (while(i<=j) ) と 2 つのループが内部にあり、別の決定があります。私が理解していないのは、ループの下のスワップの決定がメインループのすべての反復で実行されていない理由です。簡単に言えば、最後の while ループ ( while(arr[j]>pivot) j--;) の後、以下の条件が実行されないのはなぜですか? 彼らは j++ を実行し、コードはループの外に移動する必要がありますね。この例からわかるように...そうではありません!
これが私が話しているコードです:
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);
}
}