选择排序
1 /*简单选择排序每趟循环只能确定一个元素飘絮后的定位。我们可以考虑改进每趟循环确定两个元素(当前每趟最大和最小记录)的位置 2 *从而减少排序所需要的循环次数。改进后对n个数据进行排序,最多只需要n/2趟循环即可 3 */ 4 5 //二元选择排序 6 void BiSelectorSort(int a[],int n) 7 { 8 int i,j,min_key,max_key,temp; 9 10 for(i=0;i<=n/2;i++) 11 { 12 min_key=i; 13 max_key=i; 14 for(j=i+1;j<=n-1-i;j++) 15 { 16 if(a[j]>a[max_key]) 17 { 18 max_key=j;continue; 19 } 20 if(a[j]<a[min_key]) 21 { 22 min_key=j; 23 } 24 } 25 26 //交换 27 temp=a[i];a[i]=a[min_key];a[min_key]=temp; 28 temp=a[n-1-i];a[n-1-i]=a[max_key];a[max_key]=temp; 29 } 30 } 31 //简单选择排序 32 void selectSort(int a[],int n) 33 { 34 for(int i=0;i<n;i++) 35 { 36 int min_key=i; 37 38 for(int j=i+1;j<n;j++) 39 if(a[j]<a[min_key]) min_key=j; 40 41 //交换 42 int temp=a[i]; 43 a[i]=a[min_key]; 44 a[min_key]=temp; 45 46 } 47 48 } 49 //插入排序 50 void insertSort(int a[],int n) 51 { 52 for(int i=1;i<n;i++) 53 { 54 if(a[i]<a[i-1]) 55 { 56 int temp=a[i]; 57 int j=i-1; 58 while(temp<a[j]) 59 { 60 61 a[j+1]=a[j]; 62 j--; 63 } 64 a[j+1]=temp; 65 } 66 } 67 }