代码已附上,请求各位大佬指点迷津,谢谢谢谢!
参考代码:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> //快速排序算法(是对冒泡排序的一种改进) void quickSort(int *a, int low, int high) { //定义左右区间 int i = low; int j = high; int key = a[low];//选取数组第一个元素为基准值 //如果low>=high排序结束 if (low >= high) { return; } //只要low小于high就接着给爷排,同时该循环结束一次就表示比较了一轮。也就确定了一个基准值的最终位置 while (low < high) { //high向左找到第一个比key小的元素 while (low < high && a[high] >= key) { high--; } //找到了比key小的元素 if (a[high] < key) { a[low] = a[high];//因为key的位置动来动去,所以直接赋值,无需交换 //low++,准备处理下一个元素 low++; } //从左往右寻找比key大的元素 while (low < high && a[low] <= key) { low++; } if (a[low] > key) { a[high] = a[low]; high--;//处理下一个元素 } } a[low] = key;//查完一轮后,key的位置才最终确定下来,此时key左侧的都小于key,右侧都大于key quickSort(a, i, low);//用同样的方式对左部分区执行同样的操作 quickSort(a, low + 1, j);//用同样的方式对右部分区执行同样的操作 } int main() { int n = 0, m = 0; scanf("%d %d", &n, &m); int array[n]; for (int i = 0; i < n; ++i) { scanf("%d", &array[i]); } quickSort(array, 0, n - 1);//调用快速排序 //输出前m个元素 for (int i = n - 1; i >= n - m; --i) { printf("%d ", array[i]); } return 0; }
0.0分
2 人评分
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:464 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:800 |
C语言程序设计教程(第三版)课后习题10.1 (C++代码)浏览:497 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:728 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1258 |
C二级辅导-统计字符 (C语言描述——用函数求解)浏览:1156 |
拯救雅典娜浏览:1239 |
纪念品分组 (C++代码)浏览:836 |
C语言程序设计教程(第三版)课后习题9.4 (C语言代码)浏览:3357 |
防御导弹 (C语言代码)浏览:2211 |