【问题描述】
输入n个数,将n个数按从小到大的顺序输出(n<=10000)入)。
【输入样例】
8
49 38 65 97 76 13 27 49
【输出样例】
13 27 38 49 49 65 76 97
【分析】
归纳上述排序过程,具体实现步骤如下:
①读入数据存放在a数组中。
②在a[1]~a[n]中选择值最小的元素,与第1位置元素交换,则把最小值元素放入a[1]中。
③在a[2]~a[n]中选择值最小的元素,与第2位置元素交换,则把最小值元素放入a[2]中,……
④直到第n-1个元素与第n个元素比较排序为止。
程序实现方法:用两层循环完成算法,外层循环i控制当前序列最小值存放的数组位置,内层循环j控制从i+1到n序列中选择最小的元素所在位置k。
【参考程序】
#include <cstdio>
#include <iostream>
using namespace std;
const int MAXN = 10001;
int main() {
int min, n;
float temp, a[MAXN];
cin >> n;
for (int i=1; i<=n; i++) { // 输入n个数
cin >> a[i];
}
for (int i=1; i<n; i++) { // 选择排序
min = i;
for (int j=i+1; j<=n; j++) {
if (a[min] > a[j]) { // min记录较小元素的位置
min = j;
}
}
if (i != min) {
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
for (int i=1; i<=n; i++) {
cout << a[i] << " ";
}
return 0;
}