剑指 Offer 40. 最小的k个数

题目描述

输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。

示例

剑指 Offer 40. 最小的k个数_第1张图片

思路

方法1 采用未改进的快速排序

class Solution {
    public int[] getLeastNumbers(int[] arr, int k) {
        int l = 0, r = arr.length - 1;
        quickSort(arr, l, r);
        return Arrays.copyOf(arr, k);
    }

    void quickSort(int[] arr, int l, int r) {
        if(l >= r) return;
        int i = l - 1, j = r + 1, x = arr[l + r >> 1];
        while(i < j) {
            do i++; while(arr[i] < x);
            do j--; while(arr[j] > x);
            if(i < j) swap(arr, i, j); 
        }
        quickSort(arr, l, j);
        quickSort(arr, j + 1, r); 
    }

    void swap(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}

待补充

你可能感兴趣的:(LeetCode,算法,排序算法,数据结构)