私のクラスの宿題問題の整数配列の配列をソートする必要があります。私はほとんど毎回StackOverFlowErrorを取得するようです。私の配列はlist2 [10] [10]です。私のクイックソートは3つのメソッドに分かれています。 quickSort1(int、int)はmain関数で、パーティションは新しいパーティションを比較し、swapはlist2 [i]とlist2 [j]の整数配列を単純に入れ替えます。 compare2(int a、int b)メソッドは、list2 [a]がlist2 [b]より小さい場合は1を返します.bがaより小さい場合は1、等しい場合は100を返します。整数配列の配列を素早く並べ替える
私のクイックソートが正しく実装されているかどうかわかりませんが、私はスワップを認識し、正確に私が彼らの言うことを比較しています。私は、StackOverFlowErrorを取得すると、大部分が永久に繰り返されることがあります。
public static int partition(int low, int high)
{
int i = low, j = high;
int pivot = (low+high)/2;
System.out.println(i + " " + j + " " + pivot);
while (i <= j) {
while (compare(i, pivot) > 0)
i++;
while (compare(pivot, j) > 0)
j--;
if (i < j) {
swap(i,j);
i++;
j--;
}
if (i == pivot && i == j-1)
{
return i;
}
if (j == pivot && j-1 == i)
{
return i;
}
}
return i;
}
public static void quickSort1(int low, int high) {
System.out.println("Recursion: " + recursions);
int i = partition(low, high);
System.out.println(i);
if (low < i -1)
{
recursions++;
quickSort1(low, i -1);
}
if (i < high-1)
{
recursions++;
quickSort1(i, high);
}
}
public static void swap(int i, int j)
{
int[] temp = new int[n];
for(int k = 0; k < n; k++) {
temp[k] = list2[i][k];
}
for(int k = 0; k < n; k++) {
list2[i][k] = list2[j][k];
}
for(int k = 0; k < n; k++) {
list2[j][k] = temp[k];
}
}
あなたはどのように...この配列をソートする必要があると言うとき?すべての要素をソート順に並べる必要がありますか?行メジャーまたは列メジャー?または、行(または列)だけをソートする必要はありますか? – Patrick87
関数を呼び出すたびに何かを印刷してみましたか? – hugomg
おそらくこれが役立ちます:http://www.vogella.com/articles/JavaAlgorithmsQuicksort/article.html – xagyg