快速排序算法以及快速选择算法的Java实现

 模板题:

215. 数组中的第K个最大元素 - 力扣(LeetCode)

原代码 

public class test {
    /**
     * 快速排序
     * @param left 左边界
     * @param right 右边界
     * @param nums 待排序数组
     */
    public static void selectquick(int left, int right, int[] nums) {
        if (left > right) return;
        int temp = nums[left];
        int i = left, j = right;
        while (i < j) {
            while (i < j && nums[j] >= temp) {
                j -= 1;
            }
            while (i < j && nums[i] <= temp) {
                i += 1;
            }
            if (i < j) {
                int t = nums[j];
                nums[j] = nums[i];
                nums[i] = t;
            }
        }
        nums[left] = nums[i];
        nums[i] = temp;
        selectquick(left, i - 1, nums);
        selectquick(i + 1, right, nums);
    }

    /**
     * 查找第k大的数字
     * @param k 第k大
     * @param left 左边界
     * @param right 右边界
     * @param nums 待查找数组
     * @return 第k大的数字
     */
    public static int selectquickK(int k, int left, int right, int[] nums) {
        int temp = nums[left];
        int i = left, j = right;
        while (i < j) {
            while (i < j && nums[j] >= temp) j--;
            while (i < j && nums[i] <= temp) i++;
            if (i < j) {
                int t = nums[j];
                nums[j] = nums[i];
                nums[i] = t;
            }
        }
        nums[left] = nums[i];
        nums[i] = temp;
        if (i < k) {
            return selectquickK(k, i + 1, right, nums);
        } else if (i > k) {
            return selectquickK(k, left, i, nums);
        } else {
            return nums[i];
        }
    }

    public static void main(String[] args) {
        int[] arr = new int[] {3,2,1,4};
        // 整体快排
        // selectquick(0,arr.length-1,arr);
        // 选择第k大的数字
        // int k = 1;
        // System.out.println(selectquickK(arr.length-k,0, arr.length-1, arr));
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_51118755/article/details/134939519