选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。下面先看代码,待会对照代码解释:
#include "stdio.h"
int main()
{
int a[5] = { 4,3,5,1,2 };
int i, j, k, temp;
for (i = 0; i < 5; i++) { //外循环
k = i;
for (j = i + 1; j < 5; j++) //内循环
{
if (a[k] > a[j]) {
k = j;
}
}
if (k != i) { //交换
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
//输出
for (int i = 0; i < 5; i++)
{
printf("%d\n", a[i]);
}
getchar(); //暂停
return 0;
}
如上数组a[5]={ 4,3,5,1,2 },要对该数组进行升序排列。那么在第一轮外循环后我们要找出数组中最小的那个数“1”并把它放到第一位,那如何找出它呢,那就要通过内循环,内循环的功能是用a[k]标记出数列中最小的那个数。外循环开始时先把第一位标识为a[k](即k=i),然后进入内循环,内循环中用第一个元素a[k],逐个与a[j]对比,如果a[k]>a[j],则用a[k]标记a[j],再继续和剩下的对比。整个内循环完成后,a[k]就是最小的那个数,虽然我们不清楚它是第几个,但我们知道用a[k]标记了最小的那个,然后把a[k]和第一个数对换位置,交换前判断第一个数是不是最小的(k!=i),如果是就不用交换,不是就进行交换。外循环第一轮结束后最小的已经排在第一位了,下一轮外循环从下一个元素(j=i+1)进行对比,同理找出第二小的数排在第二个,以此类推。