代码已附上,请求各位大佬指点迷津,谢谢谢谢!
参考代码:
#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 人评分