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 }