编辑代码

import com.sun.deploy.util.StringUtils;

public class tets {
    
    public static void main(String[] args) {

        int[] data = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};

        System.out.println("排序之前:\n" + java.util.Arrays.toString(data));

        quickSort(data, 0, data.length - 1);

        System.out.println("排序之后:\n" + java.util.Arrays.toString(data));
    }


    public static void quickSort(int[] data, int low, int high) {
        int i, j, temp, t;
        if (low > high) {
            return;
        }
        i = low;
        j = high;
        //temp就是基准位
        temp = data[low];
        System.out.println("基准位:" + temp);

        while (i < j) {
            //因为所排列顺序是递增,而且每次哨兵排查结束在于左右哨兵是否相遇,所以右边哨兵负责寻找大于基准的数,左边哨兵寻找小于基准的数
            // ,如若需要改变快排后的结果顺序只需要改变左右哨兵对于基准数的大小判断
            //先看右边,依次往左递减 在未和左边哨兵相遇前寻找大于或者等于基准的数
            while (temp <= data[j] && i < j) {
                j--;
            }
            //再看左边,依次往右递增 在未和右边哨兵相遇前寻找小于或者等于基准的数
            while (temp >= data[i] && i < j) {
                i++;
            }
            //如果满足条件则交换  左右哨兵未相遇的情况下寻找到满足条件的数
            if (i < j) {
                System.out.println("交换:" + data[i] + "和" + data[j]);
                t = data[j];
                data[j] = data[i];
                data[i] = t;
                System.out.println(java.util.Arrays.toString(data));
            }
        }
        //最后将基准位与i和j相等位置的数字交换 左右哨兵相遇
        System.out.println("基准位" + temp + "和i、j相遇的位置" + data[i] + "交换");
        data[low] = data[i];
        data[i] = temp;
        System.out.println(java.util.Arrays.toString(data));

        //此时基准数左边都比基准数小,右边都比基准数大,故而基准数位置不变,基准数左右两边重新进行快排
        //递归调用左半数组
        quickSort(data, low, j - 1);
        //递归调用右半数组
        quickSort(data, j + 1, high);
    }
}