用C语言实现,给定n个数字,找出前m大的数字。 输入 多组输入,每组输入格式如下。 第一行包含两个整数n m。(n<=100000, m>0) 第二行包含n个正整数。 输出 输出前m大的数字,若m>n输出ERROR。每组输出占一行
时间: 2024-02-21 16:00:31 浏览: 89
以下是用C语言实现找出前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 - 1; 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);
}
}
int main() {
int n, m;
while (scanf("%d %d", &n, &m) == 2) {
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
if (m > n) {
printf("ERROR\n");
continue;
}
quickSort(arr, 0, n - 1);
for (int i = 0; i < m; i++) {
printf("%d\n", arr[i]);
}
}
return 0;
}
```
以上代码中,首先定义了一个swap函数和一个partition函数,用于快速排序的实现。然后在主函数中,使用while循环和scanf函数读取多组输入。每组输入中,先读取n和m,然后读取n个数字,存储在数组arr中。如果m大于n,则输出ERROR;否则,对数组arr进行快速排序,并输出前m个数字。
阅读全文