我需要在我的一個類中爲一個作業問題對整型數組數組進行排序。幾乎每次我都會看到StackOverFlowError。我的數組是list2 [10] [10]。我的快速排序分爲3種方法。 quickSort1(int,int)是主函數,分區比較一個新的分區,而swap只是簡單地交換list2 [i]和list2 [j]處的整數數組。如果list2 [a]小於list2 [b],則compare(int a,int 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