基本思想
每一次排序从数据元素(数组为例)中选出一个最小(或者是最大)的一个元素,放在这组数据的最前边,然后将剩下的数据看成是一个新的数组,重复上边的步骤,直至排序完成。
举个栗子
以无序数组[45 38 13 17 7]为例 第一次遍历,以第0位45开始,找出最小的值7,然后7与45交换位置得到
7 [38 13 17 45]
第二次遍历,从第1位38开始,找出最小值13,交换位置
7 13 [38 17 45]
第三次遍历,找出最小值17,与第2位38交换位置得到
7 13 17 [38 45]
第四次遍历 得到
7 13 17 38 [45]
遍历n-1次之后,排序结果为
7 13 17 38 45
实现方法
使用两层循环 外层循环i控制当前序列最小值存放的数组位置 内层循环j控制从i+1到n序列中选择最小值的元素所在的位置k
代码示例
#include<iostream>
using namespace std;
const int MAXN = 10001;
int main()
{
int n, k, i, j;
float temp, a[MAXN];
cin >> n;
for (i = 1; i <= n; i++)
cin >> a[i];
for (i = 1; i <= n; i++)
{
k = i;
for (j = i + 1; j <= n; j++)
if (a[j] < a[k]) k = j;
if (k != i)
{
temp = a[i]; a[i] = a[k]; a[k] = temp;
}
}
for (i = 1; i <= n; i++)
cout << a[i] << "" << endl;
system("Pause\n");
return 0;
}
效果展示
|