最小的 K 个数
题目描述
给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组。(数据顺序不限)
解法一:先排序,后选择
使用快排将数组进行升序排序,然后取出前 K 个数即可。
void swap(vector<int>& array, int i, int j) {
if (i != j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
int partition(vector<int>& array, int start, int end) {
int poivtElem = array[start];
int i = start;
for (int j = start; j <= len; ++j) {
if (array[j] < poivtElem) {
swap(array, ++i, j);
}
}
swap(array, i, start);
return i;
}
void quickSort(vector<int>& array, int start, int end) {
if (start < end) {
int poivt = partition(array, start, end);
quickSort(array, start, poivt - 1);
quickSort(array, poivt + 1, end);
}
}
void <int> GetLeastNumbers_Solution(vector<int>& input, int k) {
vector<int>& res;
int len = input.size();
if (k > len || k <= 0 || len == 0)
return res;
quickSort(input, 0, len - 1);
for (int i = 0; i < k; ++i) {
res.emplace_back(input[i]);
}
return res;
}