简单选择排序时选择排序中最简单的排序方式,其基本思想是:第i趟排序在待排序序列r[i]~r[n](1<=i<=n-1)中选取关键码最小的记录方法,并和第i个记录交换作为有序序列的第i个记录。
在简单选择排序中需要解决的关键问题是:
(1)如何在待排序序列中选出关键码最小的记录?
设置一个整形变量index,用于记录在一趟比较过程中关键码最小的记录位置。第i趟简单选择排序的待排序区间r[i]~r[n],开始将index设定为当前无序区的第一个位置,然后用r[index]与无序区中的其他记录进行比较。若有比r[index]小的记录,就将index改为这个新的最小记录的位置,随后再用r[index]与后面的记录进行比较,并根据比较结果修改index的值。一趟比较结束后,index中保留的就是本趟排序的关键码最小的记录位置。算法描述为:
index=i;
for(j=i+1;j<=n;j++){
if(r[j]<r[index]){
index=j;
}
}
(2)如何确定待排序序列中关键码最小的记录在有序序列中的位置?
第i趟简单选择排序的待排序区间是r[i]~r[n],则r[i]是无序区第一个记录,所以,将index所指向的关键码最小的记录与r[i]交换。算法描述为:
if(index!=i){
r[i] r[index];
}
完整的简单选择排序算法:
void SelectSort(int r[],int n){
for(i=1;i<n;i++){
index=i;
for(j=i+1;j<=n,j++){
if(r[j]<r[index]){
index=j;;
}
}
if(index!=i){
r[i] r[index];
}
}
}