欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。

发布时间:2025/3/8 编程问答 22 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。

[输入]

第一行包含一个整数n,表示数组的大小。

第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。第三行包含一个整数k。k < n。

[输出]

从大到小输出前k大的数,每个数一行。

[样例输入]

10

4 5 6 9 8 7 1 2 3 0

5

[样例输出]

9

8

7

6

#include<iostream> #include<stdio.h> #include<stdlib.h> int a[1000]; void quick_sort(int a[], int start, int end) {if (start<end){int s = a[start];int i = start;int j = end;//刚开始排序从右向左查找才可以while (i<j){//从右向左查找第一个小于s的值与a[0]交换while (i<j&&a[j] >= s)j--;if (i<j)a[i++] = a[j];//把a[j]的值给a[i],并让i向后走一位//从左向右查找第一个大于等于s的值与a[0]交换while (i<j&&a[i]<s)i++;if (i<j){a[j--] = a[i];//把a[i]的值给此时s所在的地址,并让j向前退一位}}a[i] = s;//因为在之前的交换值过程中a[i]的值已经不是最初的值,所以要变回来quick_sort(a, start, i - 1);//排序枢轴前数列quick_sort(a, i + 1, end);//排序枢轴后数列} } int main() {int n;//输入n个数字scanf("%d", &n);int i = 0;//用于存储数字时的循环计数for (i = 0; i<n; i++) //将n个数字存入数组中scanf("%d", &a[i]);int k;scanf("%d", &k);quick_sort(a, 0, n - 1);//快速排序函数调用for (i = n - 1; k>0; k--, i--) //循环输出排序结果printf("%d\n", a[i]);system("pause");return 0; }

创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。