![](/img/trans.png)
[英]Quicksort. Exception in thread “main” java.lang.StackOverflowError
[英]QuickSort giving exception in thread “main” java.lang.StackOverflowError
我寫了如下的快速排序代碼。 排序以中間數字為中心:
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] numbers = {3, 6, 9, 1, 34};
int low = 0;
int high = numbers.length - 1;
quicksort(numbers, low, high);
}
static void quicksort(int[] arr, int low, int high) {
int i = low;
int j = high;
int middle = arr[(low + high) / 2];
while(i < j) {
while(arr[i] < middle ) {
i++;
}
while(arr[j] > middle) {
j--;
}
if( i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
if(low < j) {
quicksort(arr, low, j);
}
if(i < high) {
quicksort(arr, i, high);
}
System.out.println(Arrays.toString(arr));
}
}
但是,運行代碼后,我得到stackoverflow異常。 它說線程“ main”中的異常java.lang.StackOverflowError
Exception in thread "main" java.lang.StackOverflowError
at QuickSort.quicksort(QuickSort.java:47)
at QuickSort.quicksort(QuickSort.java:47)
at QuickSort.quicksort(QuickSort.java:47)
at QuickSort.quicksort(QuickSort.java:47)
at QuickSort.quicksort(QuickSort.java:47)
at QuickSort.quicksort(QuickSort.java:47)
at QuickSort.quicksort(QuickSort.java:47)
請幫助我找出運行以上代碼的錯誤。
i和j的值需要分別增加和減少。 請參見下面的工作代碼:
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] numbers = {3, 9, 6, 1, 34};
int low = 0;
int high = numbers.length - 1;
quicksort(numbers, low, high);
}
static void quicksort(int[] arr, int low, int high) {
int i = low;
int j = high;
int middle = arr[(low + high) / 2];
while(i <= j) {
while(arr[i] < middle ) {
i++;
}
while(arr[j] > middle) {
j--;
}
if( i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if(low < j) {
quicksort(arr, low, j);
}
if(i < high) {
quicksort(arr, i, high);
}
System.out.println(Arrays.toString(arr));
}
}
希望這可以幫助!
您可以查看此鏈接,以更好地了解快速排序及其工作方式。
public static void quickSort(int [] arr,int low,int high){如果(arr == null || arr.length == 0)返回;
if (low >= high)
return;
int middle = low + (high - low) / 2;
int pivot = arr[middle];
int i = low, j = high;
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
// recursively sort two sub parts
if (low < j)
quickSort(arr, low, j);
if (high > i)
quickSort(arr, i, high);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.