#include<stdio.h>
void Selection (int a[],int len){
for(int i=0;i<len-1;i++){ //i代表子序列的第一位,一开始子序列等于整个序列,i<len-1并不是防止越界,而是没有必要
int min = a[i];//这一步很巧妙,与最后的赋值互相呼应
int minIndex = i;
for(int j=i+1;j<len;j++){//每次选择一个最小的放在子序列第一位
if(a[j]<min){
min = a[j];
minIndex = j;
}
}
a[minIndex] = a[i];
a[i] = min;
}
// for(int i=0;i<len-1;i++){//i<len-1防止越界
// for(int j=i+1;j<len;j++){//子序列不断和i比较,for执行完时迭代出一个最小的
// if(a[j]<a[i]){
// int t = a[i];
// a[i] = a[j];
// a[j] = t;
// }
// }
// }
}
void print (int a[],int len){
for(int i=0;i<len;i++)
printf("%d ",a[i]);
putchar('\n');
}
main(){
int a[]={1,3,5,9,2,4,10,8,7};
int len = sizeof(a)/sizeof(int);
Selection(a,len);
print(a,len);
}
选择排序 (C语言)
最新推荐文章于 2022-08-23 16:09:03 发布