百度百科给的代码
- 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;
- }
- }