选择排序核心思想 跟 冒泡排序差不多。
冒泡排序做得比较多无用功,而选择排序相对较少。
选择排序代码如下:
#include<stdio.h>
void swap(int *a,int *b)
{
int t;
t = *a;
*a = *b;
*b = t;
}
int main()
{
int a[]={5,2,3,1,4};
int i,j,min,len;
len = sizeof(a)/sizeof(int);
/*-----主要语句-----*/
for(i=0;i<len;i++)
{
min = i;
for(j=i+1;j<len;j++)
if(a[min]>a[j])
min = j;
if(min!=i)
swap(&a[i],&a[min]);
}
/*---------------*/
for(i=0;i<len;i++)
printf("%d,",a[i]);
return 0;
}
打印结果:1,2,3,4,5
由上图可知道,选择排序在第二层for循环中,是用 min 来记录下较小数值的下标,一轮循环过后,min自然是最小的数值的下标,然后再做数值交换。
所以在二层for循环,一轮循环,才会做一次数值交换,而不像冒泡排序,只要是检测到比最小的还小的数值就马上做数值交换,而不等到整个循环结束(你怎么知道下一个会不会更小呢?)
因此冒泡排序是十分慢的算法