📅  最后修改于: 2023-12-03 14:40:26.084000             🧑  作者: Mango
本测验是一道C语言编程题,要求为给定的整数数组中查找最大的K个数,并将它们按降序输出。
给定一个包含n个整数的数组a[],以及一个正整数k。在这个数组中,查找最大的k个数,并将它们按降序输出。数组a[]中可能包含重复数字,输出的最大数字可能有多个,输出的数字顺序不做要求,只需要降序输出即可。
以下为一种可能的实现方法,时间复杂度为O(nlogn)。
#include <stdio.h>
#include <stdlib.h>
// 比较函数用于快排
int cmp(const void *a, const void *b) {
return *(int *)b - *(int *)a;
}
int main() {
int n, k;
scanf("%d %d", &n, &k);
int a[n];
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
qsort(a, n, sizeof(int), cmp); // 快排
int cnt = 0, i = 0;
while (cnt < k && i < n) { // 输出前k大的数
if (a[i] != a[i-1]) { // 避免重复
printf("%d ", a[i]);
cnt++;
}
i++;
}
return 0;
}
本题需要对快排函数和数组操作比较熟练,同时还需要注意根据题意处理重复数字的情况。