基本思想
通过下标位置减少交换次数,在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
操作方法
- 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换;
- 第二趟,从第二个记录开始的n-1个记录中再选出关键码最小的记录与第二个记录交换;
- 以此类推…..
- 直到整个序列按关键码有序。
代码
#include<stdio.h>
//简单选择排序
void selectSort(int r[],int n){
int min;
int i,j,temp;
for(i=0;i<n;i++){
min = i; //初始化本轮最小元素的位置
for(j=i+1;j<n;j++){
if(r[min]>r[j]){
min = j; //找到最小元素的下标
}
}
if(i != min){ //如果发生了改变
temp = r[i];
r[i] = r[min];
r[min] = temp;
}
}
}
//打印
void print(int r[],int n){
int i;
for(i=0;i<n;i++){
printf("%3d",r[i]);
}
printf("\n");
}
int main(){
int a[8] = {3,1,5,7,2,4,9,6};
int i;
printf("排序前:\n");
print(a,8);
printf("简单选择排序后:\n");
selectSort(a,8);
print(a,8);
return 0;
}