给你n个整数,请按从大到小的顺序输出其中前m大的数,整数可能会重复出现,使用c++解答
时间: 2023-04-12 18:01:25 浏览: 79
以下是一个简单的 C 代码实现,可以实现按从大到小的顺序输出前 m 大的数:
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100000
int cmp(const void *a, const void *b) {
return *(int *)b - *(int *)a;
}
int main() {
int n, m;
int a[MAX_N];
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++) {
printf("%d\n", a[i]);
}
return 0;
}
如果您有其他问题,可以继续提问。
相关问题
用c++实现 给你n个整数,请按从大到小的顺序输出其中前m大的数,数可能有重复。
可以使用堆排序来解决这个问题。首先建立一个大小为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中的元素即可。
给你n个整数,请按从大到小的顺序输出其中前m大的数。用c++实现
可以使用快速排序算法来解决这个问题。具体实现如下:
```
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j] >= pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return i + 1;
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
void printTopM(int arr[], int n, int m) {
quickSort(arr, 0, n - 1);
printf("Top %d numbers: ", m);
for (int i = 0; i < m; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {10, 5, 8, 3, 7, 4};
int n = sizeof(arr) / sizeof(arr[0]);
int m = 3;
printTopM(arr, n, m);
return 0;
}
```
这段代码可以按从大到小的顺序输出数组中前m大的数。