public static void main(String[] args) {
int[] arr = { 9, 4, 7, 2, 3, 18, 10, 5, 6 };
quickSort(arr, 0, arr.length - 1);// 快排
}
private static void quickSort(int[] arr, int left, int right) {
if (left > right) {
return;
}
int i = left;
int j = right;
int baseNum = arr[left]; // 把最左边的数当做基准数 while (i != j) {
while (arr[j] >= baseNum && j > i) {// 满足这个条件,就一直从右往左检索
j--;
}
while (arr[i] <= baseNum && i < j) {// 满足这个条件,就一直从左往右检索
i++;
}
// 如果代码走到这里,说明i和j都找到了相应的数
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 如果i和j相遇,就执行以后代码
arr[left] = arr[i];// 把i位置的数赋值给基准数
arr[i] = baseNum;// 把基准数赋值给i位置的数
// 一轮交换完毕
                         
                                    
 //问题出现在下边两行代码!!!!!!!!!!报错
quickSort(arr, 0, i - 1);// 排基准数的左边
quickSort(arr, j + 1, arr.length - 1);// 排基准数的右边
}
我有点不明白left和right并没有重新赋值,初始值为0和arr.length-1,为什么上边的有问题,报一个堆栈溢出错误????????如果改成下边这样就没有问题,!!!!!!!!!!!//没问题
quickSort(arr, left, i - 1);// 排基准数的左边
quickSort(arr, j + 1, right);// 排基准数的右边
或者把其中一个改了,也没问题如下面!!!!!!!!!!!//没问题
                quickSort(arr, 0, i - 1);// 排基准数的左边
quickSort(arr, j + 1, right);// 排基准数的右边