选择排序

 

 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 }

 

posted @ 2016-01-20 15:54  尾巴草  阅读(205)  评论(0编辑  收藏  举报