错误原因:
Exception in thread “main” java.lang.StackOverflowError
快排出现错误Exception in thread "main"java.lang.StackOverflowError(堆栈溢出错误)。出错原因是在定义数组的初始位置跟结束位置时没有定义他们之间的大小关系,即数组的初始位置start必须小于结束位置end,即在定义排序方法的开始位置添加 if 条件语句。错误如下图所示:
解决方法:
在定义排序方法的开始位置添加 if 条件语句。
原码展示
package demo4;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = new int[]{3,4,6,7,2,7,2,8,0,9,1};
quickSort(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr,int start,int end){
if(start<end){
//把数组中的第0个数字作为标准数
int stard = arr[start];
//记录需要排序的下标
int low = start;
int high = end;
//循环找比标准数大的数和比标准数小的数
while(low<high){
//右边的数字比标准数大
while(low<high && stard<=arr[high]){
high--;
}
//使用右边的数字替换左边的数
arr[low] = arr[high];
//如果左边的数字比标准数小
while(low<high && arr[low]<=stard){
low++;
}
arr[high] = arr[low];
}
//把标准数赋给low所在位置的元素(low或high都可以,因为它们两个都重复了)
arr[low] = stard;
//处理所有的小于标准数的左边的数字
quickSort(arr, start, low);
//处理所有的大于标准数的右边的数字
quickSort(arr, low+1, end);
}
}
}