Leetcode——最小的K个数(快排)

Posted Yawn,

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode——最小的K个数(快排)相关的知识,希望对你有一定的参考价值。

1. 最小的K个数

(1)快排

class Solution {
    public int[] getLeastNumbers(int[] arr, int k) {
        quickSort(arr, 0, arr.length - 1);
        return Arrays.copyOf(arr, k);
    }
    private void quickSort(int[] arr, int left, int right) {
        // 子数组长度为 1 时终止递归
        if (left >= right) return;
        
        // 哨兵划分操作,选择pivot用作基准,将最左边值与pivot交换位置
        int i = left, j = right;
        int pivot = left + (int) (Math.random() * (right - left + 1));
        swap(arr, pivot, left);

        while (i < j) {
            while (i < j && arr[j] >= arr[left]) j--;
            while (i < j && arr[i] <= arr[left]) i++;
            swap(arr, i, j);
        }
        swap(arr, i, left);
        // 递归左(右)子数组执行哨兵划分
        quickSort(arr, left, i - 1);
        quickSort(arr, i + 1, right);
    }
    private void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
}

以上是关于Leetcode——最小的K个数(快排)的主要内容,如果未能解决你的问题,请参考以下文章