0

私はプログラミングと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);
        }
    }
4

1 に答える 1

0

あなたの質問を正しく理解していれば、パーティションループの最後の繰り返しについて話しているだけです。

この場合、スワップ ブロックが実行されない理由は、i が j の 1 つ右の位置で停止したため、if 条件が成立しなくなったためです。

于 2013-02-11T03:30:01.883 に答える