解题思路 :
这道题唯一的难点是从小到大输出 需要对输入的数组进行排序
这里用递归实现一个冒泡排序的方法
flag的建立是为了减少运算次数
(如果遍历后有发生过数据交换,证明前面n-1位的数据不是顺序排列的;反之则为顺序排列,不需要再递归下去)
#include <stdio.h>
void px(int* arr, int n) {int flag = 1;
for (int i = 0; i < n - 1; i++) {
int temp;
if (arr[i] > arr[i + 1]) {
flag = 0;
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
if (flag == 0) {
if (n > 1) {
px(arr, n - 1);
}
}
}
int main() {
int n, k;
int arr[1000];
scanf("%d %d", &n, &k);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
px(arr, n);
for (int i = 0; i < k; i++) {
printf("%d ", arr[i]);
}
return 0;
}