[小练习] 快速排序

public class QuickSort {
    public static void main(String[] args) {
        int[] nums = {7, 4, 6, 5, 8, 1, 3};
        System.out.println(arrayToString(nums));
        sort(nums, 0, nums.length - 1);
        System.out.println(arrayToString(nums));
    }

    public static String arrayToString(int[] nums) {
        String str = "";
        for (int num : nums) {
            str += num + " ";
        }
        return str;
    }

    public static void sort(int[] nums, int starts, int ends) {
        if (starts > ends) {
            return;
        }
        int base = nums[starts];  // 把第一个数当作基准数
        int i = starts;
        int j = ends;
        while (i < j) {
            // 将基准值与右侧数值做比较,查找比base小的数值,获取下标 j,  j 从右向左移动
            while (base <= nums[j] && i < j) {
                j--;
            }
            System.out.println("j = " + j);
            // 将基准值与左侧数值做比较,查找比base大的数值,获取下标 i,  i 从左向右移动
            while (base >= nums[i] && i < j) {
                i++;
            }
            System.out.println("i = " + i);
            // 交换 i 和 j 的值
            if (i < j) {
                System.out.println("交换" + nums[i] + "和" + nums[j]);
                int temp = nums[j];
                nums[j] = nums[i];
                nums[i] = temp;
            }
        }
        // 完成循环后将base值放到中间位置
        System.out.println("+++" + arrayToString(nums));
        nums[starts] = nums[i];
        nums[i] = base;

        sort(nums, starts, i-1);
        sort(nums, j+1, ends);
    }
}

你可能感兴趣的:([小练习] 快速排序)