百度百科给的代码
void select_sort(int*a,int n)
{
register int i,j,min,t;
for(i=0;i<n-1;i++)
{
min=i;//查找最小值
for(j=i+1;j<n;j++)
if(a[min]>a[j])
min=j;//交换
if(min!=i)
{
t=a[min];
a[min]=a[i];
a[i]=t;
}
}
}
优化后:
void SelectSort(int r[],int n) //n为数组元素个数
{
int i ,j , min ,max, tmp;
for (i=0 ;i <n/2;i++) /*做不超过n/2趟选择排序,这样可以节约一半的时间*/
{
min = i; max = i ;
for (j= i+1; j<= n-i-1; j++)
{
if (r[j] > r[max])
{
max = j ; continue ;
}
if (r[j]< r[min])
{
min = j ;
}
}
<span style="white-space:pre"> </span>//先处理最小值
tmp = r[i]; r[i] = r[min]; r[min] = tmp;
<span style="white-space:pre"> </span>//交换后最大值位置需要重新定位
if(i==max) max=min;
tmp = r[n-i-1]; r[n-i-1] = r[max]; r[max] = tmp;
}
}
运行结果