这个代码要怎么改才能运行出来

import java.util.Arrays;
public class Text {
public static void main(String[] args) {
int[] arr = new int[] { 1, 8, 5, 7, 2, 3, 4, 9, 6, 10};
quicksort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
public static void quicksort(int[] arr, int left, int right) {
if (right >= left) {
// 保存基数
int basic = arr[left];
// 定义左右指针
int i = left;
int j = right;
while (i < j) { // 左指针小于右指针
while (i < j && arr[j] > basic) {// 操作右指针找到小于基数的下标
j--;
}
if (i < j) {
arr[i] = arr[j]; // 将右指针对应小于基数的值放到左指针所指的位置
i++; // 左指针自加
}
while (i < j && arr[i] < basic) {// 相反,找到大于基数的下标
i++;
}
if(i < j) {
arr[j] = arr[i]; //大于基数的值赋给右指针所指的位置
j--; // 右指针自减
}
}
arr[i] = basic; // 将基数放入到指针重合处
quicksort(arr, left, i - 1); //重复调用,对左半部分数组进行排序
quicksort(arr, i + 1, right); //对右半部分数组进行排序
}
}
}
报错截图

img

public class QuickSort {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 8, 5, 7, 2, 3, 4, 9, 6, 10};
        quickSort(arr, 0, arr.length - 1);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }


    private static void quickSort(int[] arr, int low,int high){
        //当左边下标大于右边的下标,说明本轮已经完成比较了,直接退出
        if(low > high){
            return;
        }
        int i = low;
        int j = high;
        //哨兵
        int temp = arr[low];
        while (i < j){
            //找到右边大于左边的下标
            while (i < j && arr[j] >= temp){
                j --;
            }
            //找到左边小于右边的下标
            while (i < j && arr[i] <= temp){
                i ++;
            }
            //到这一步,说明左边大于右边的元素找到了,交换元素
            if(i < j){
                int t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;
            }
        }
        //哨兵移动到中间位置(比大的小,比小的大的位置)
        arr[low] = arr[i];
        arr[i] = temp;
        //这里为什么是 i - 1、i + 1:因为哨兵已经找到了它位置,不需要再移动了
        quickSort(arr,low,i - 1);
        //继续按照上面思路继续比较交互
        quickSort(arr,i + 1,high);
    }
}

运行报错么还是