//排序无非就干两件事,比较+交换 //如果想优化效率,比较不能省,但是交换可以省,比而不换只记下标 #include <stdio.h> void mySwap(int *pa ,int *pb) { *pa ^= *pb; *pb ^= *pa; *pa ^= *pb; } //基础版 void selectSort(int *p,int n)//升序 { int i,j; for(i = 0;i<n-1;i++) { for(j = i+1;j<n;j++) { if(p[i] > p[j])//边比边换 mySwap(&p[i],&p[j]); } } } //优化版 void selectSort2(int *p,int n)//升序, { int i,j; int idx; for(i = 0;i<n-1;i++) { idx = i; for(j = i+1;j<n;j++) { if(p[idx] > p[j])//比而不换只记下标 idx = j; } if(idx != i) mySwap(&p[idx],&p[i]);//比完再换 } } int main(void) { int arr[10] = {1,3,5,7,9,2,4,6,8,0}; selectSort2(arr,10); int i; for(i = 0;i<10;i++) printf("%d ",arr[i]); return 0; }