今天我们来讲解一下选择排序,先说一种比较简单的简单选择排序吧。
先说简单说一下选择排序:选择排序的基本思想是:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。
简单选择排序的基本流程如下:
从待排序列找到关键字最小的,与第一个交换,然后n-1(第一个元素除外)个依次重复上述步骤。
初始关键字:45 38 66 90 88 10 25 45
第一次选择:10 [38 66 90 88 45 25 45]
第二次选择:10 25 [66 90 88 45 38 45]
第三次选择:10 25 38 [90 88 45 66 45]
第四次选择:10 25 38 45 [88 90 66 45]
第五次选择:10 25 38 45 45 [90 66 88]
第六次选择:10 25 38 45 45 66 [90 88]
第七次选择:10 25 38 45 45 66 88 90
简单选择排序的算法如下:void SelectSort(List R, int n){
int min ,i,j;
//每次循环,选择出一个最小键值
for (i=1;i<=n-1;i++){
min=i; //假设第i个记录键值最小
//循环比较第i个记录与之后的记录
for (j=i+1;j<=n;j++){
//记录下最小的记录下标
if(R[j].key<R[min].key){
min=j;
}
if(min!=j){
//将最小键值与第i个记录交换
swap(R[min],R[j])
}
}
}
}
简单选择排序是一种不稳定的算法,他的时间复杂度为O(N2),空间复杂度为O(1)。