-1
public static void sort(int[] a){
        if (a.length>1){
            int pivot=a[a.length-1];
            int left=0;
            int right=a.length-1;
            while(left<=right){
                while(a[left]<pivot)
                    left++;
                while(a[right]>pivot)
                    right--;
                if(left<=right){
                    int tmp=a[right];
                    a[right]=a[left];
                    a[left]=tmp;
                    left++;
                    right--;
                }
            }
            int[] tmp1=new int[right];
            for(int i=0;i<tmp1.length;i++)
                tmp1[i]=a[i];
            int[] tmp2=new int[a.length-right-1];
            for(int i=left;i<a.length;i++)
                tmp2[i-left]=a[i];
            sort(tmp1);
            sort(tmp2);
        }
    }

1 つの関数でクイックソート アルゴリズムを作成しようとしていますが、機能しません。任意のヘルプは aprrecited です。ありがとう

編集:私はそれを解決しました。皆様のご意見に感謝します。

4

2 に答える 2

2

問題は、最後にtmp1andを使用しtmp2て新しい配列を適合させていないことだと思いaます...他の配列を作成せずにそれを行う方法は次のとおりです。

    public static void sort(int[] a, int left, int right){
        if (left < right){
            int pivot = a[right];
            int pos = left - 1;
            for (int i = left; i < right; i++)
                if (a[i] <= pivot)
                    Swap(a, ++pos, i);
            Swap(a, pos + 1, right);
            sort(a, left, pos);
            sort(a, pos + 1, right);
        }

    }

    public  static void Swap(int[] a, int i, int j){
        int temp = a[j];
        a[j] = a[i];
        a[i] = temp;
    }

並べ替えの最初の呼び出しは、sort(a, 0, a.length - 1)

これがお役に立てば幸いです

于 2013-03-19T03:20:06.597 に答える
0

あなたのソート方法は、ほとんどの int ソート方法と非常に比較されているようです。これは、すばやく簡単なものです。

public static void sort(int[] intArray){
    int n = intArray.length;
    int temp = 0;
    for(int i=0; i < n; i++){
        for(int j=1; j < (n-i); j++){
            if(intArray[j-1] > intArray[j]){
                temp = intArray[j-1];
                intArray[j-1] = intArray[j];
                intArray[j] = temp;
            }
        }
    }
}

これは単なるバブルソートです。再帰のポイントがわかりません。他にもたくさんの種類の並べ替えがありますが、配列の長さが短い場合、これが最も簡単です (IMO)。他のものを調べてください。彼らがしていることはちょっとクールです(ソートアルゴリズム)。

あなたの質問にたどり着くために.... @RobinCurbeloが言ったように、あなたは正しく使用temp1しませんでした。temp2あなたのアイデアはそこにありますが、あなたは自分が何をする必要があるかを考えすぎていたと思います。

于 2013-03-19T03:28:52.147 に答える