百度百科给的代码
[cpp] view plain copy 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; } } }
优化后:
[cpp] view plain copy 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; } } 运行结果