用c++实现 给你n个整数,请按从大到小的顺序输出其中前m大的数,数可能有重复。
时间: 2023-04-12 09:02:02 浏览: 92
可以使用堆排序来解决这个问题。首先建立一个大小为m的小根堆,然后遍历n个整数,如果当前整数比堆顶元素大,则将堆顶元素弹出,将当前整数加入堆中。最后,堆中的元素就是前m大的数,按照从大到小的顺序输出即可。
以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100000
#define MAX_M 10000
int cmp(const void *a, const void *b) {
return *(int *)b - *(int *)a;
}
int main() {
int n, m;
int a[MAX_N], b[MAX_M];
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
qsort(a, n, sizeof(int), cmp);
for (int i = 0; i < m; i++) {
b[i] = a[i];
}
qsort(b, m, sizeof(int), cmp);
for (int i = 0; i < m; i++) {
printf("%d ", b[i]);
}
printf("\n");
return 0;
}
```
这个程序首先读入n和m,然后读入n个整数。使用qsort函数将这n个整数从大到小排序。然后将前m个整数复制到另一个数组b中,再使用qsort函数将b中的整数从大到小排序。最后输出b中的元素即可。