选择排序算法(Selection Sort)的基本思想是:每一趟在n-i+1个记录中选出关键字最小的记录,作为有序序列中第 i 个记录,其中最简单且为读者最熟悉的是简单选择排序。(Simple Selection Sort)
一趟简单选择排序的记录操作为:通过 n-i 次关键字间的比较,从 n-i+1 个记录中选出关键字最小的记录,并和第 i (1<=i<=n)个记录交换之。其算法如下:
void SelectSort(SqList &L) //对顺序表L作简单选择排序
{
for(i=1;i<L. length;i++) //选择第 i 小的记录,并交换到位
{
j=SelectMinKey(L, i); //在L. r[i . .L. length]中选择key 最小的记录
if(i!=j) L. r[i]⇔L. r[j]; //与第 i 个记录交换
}
}
int SelectMinKey(SqList L, int i) //在L. r[i . .L. length]中寻找最小的记录
{
int j, k=i;
SqList mintmp=L. r[i]; //定义最小记录为第 i 个记录
for(j=i+1;j<L. length;j++) //在L. r[i . . L. length]中选择key 最小的记录
{
if(mintmp. key>L. r[j]. key) //在第 i 个后遇到比mintmp 小的,将其值赋给mintmp
{
mintmp=L. r[j];
k=j; //记录最小记录的下标
}
}
return k; //将所找到的最小记录的位置返回给主函数
}