1、基本思想
简单选择排序的作法是:第一趟扫描所有数据,选择其中最小的一个做为第一个;第二趟从第二个数据开始向后扫描,选择最小的做为第二个;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。
2、算法
void SelectSort (Elem R[], int n )
{ // 对记录序列R[1..n]作简单选择排序。
for (i=1; i<n; ++i)
{ // 选择第 i 小的记录,并交换到位
j = SelectMinKey(R, i);
// 在 R[i..n] 中选择关键字最小的记录
if (i!=j) R[i]←→R[j]; // 与第 i 个记录交换
}
} // SelectSort
算法中if (i!=j) R[i]←→R[j]; 与第 i 个与第j个记录交换,是跨越式交换,所以是不稳定的
要实现稳定的话,移动只能依次往后移动
代码为:
if(i!=j)
{
a[0]=a[j];
for(k=j;k>i;k--) a[k]=a[k-1];
a[i]=a[0];
}
这样描述算法就是稳定的,所以说简单选择排序是稳定的。