该算法的实现思想是,对具有n条记录的无序表进行n-1次扫描,第I次从无序表中的第I条记录中找出后序关键字中最小的记录,放在第I条位置。
例如,使用简单的选择排序算法对无序表{56、12、80、91、20}进行排序时,具体步骤如下。
在最初遍历中,从下标为1的位置56找出关键字值最小的记录12,与下标为0的关键字56交换位置:
在第2次扫描中,从下标为2的位置56找出最小值20,与下标为2的关键词56调换位置:
在第3次扫描中,从下标为3的位置80开始找出最小值56,与下标为3的关键词80进行位置调换:
在第四次扫描中,从下标为4的位置91,与最小为80、下标为4的关键字91进行位置置换:
选择完这个简单的排序算法后,无序表将变成有序表。
请选择要轻松排序的实现代码。
#包含
#包含
#define MAX 9
//单个记录的结构
typedef struct {
int key;
}SqNote;
//记录表结构
typedef struct {
SqNote r[MAX];
int length;
}SqList;
//调换两条记录的位置
voidswap(sqnote*a,SqNote *b ) )。
int key=a-key;
a-key=b-key;
b-key=key;
}
//查找表中关键字的最小值
intselectminkey(sqlist*L,int i ) {
int min=i;
//下标从i 1扫描到最后的关键词,找到最小值所在的位置
wile(I1length ) {
if(L-R(min ).keyl-R ) ) I1 ).key ) {
min=i 1;
}
I;
}
返回时间;
}
//简析排序算法的实现函数
voidselectsort(sqlist*L ) {
for(intI=0; ilength; I ) {
//为了寻找第I个位置而放置的最小值的位置
intj=selectminkey(L,I );
如果//j和I不相等,最小值表示下标不在I的位置,需要更换
if(I!=j({
SWAP () L-r[j],) L-r[j] );
}
}
}
int main ()。
sqlist*L=(sqlist* ) malloc (sizeof ) sqlist );
L-length=8;
L-r[0].key=49;
L-r[1].key=38;
L-r[2].key=65;
L-r[3].key=97;
L-r[4].key=76;
L-r[5].key=13;
L-r[6].key=27;
L-r[7].key=49;
选择(l );
for(intI=0; ilength; I ) {
printf('%d ',L-r[i].key );
}
返回0;
}
执行结果:
13 27 38 49 49 65 76 97