简单选择排序是经常用到的一种排序算法.

  原理: 

 1.简单选择排序一句话概括:每次选择无序数列中最小的将其放在有序数列的最后。

 2.在简单选择排序中,我们用初始化的数字int a[6]={2,5,6,3,1,4}

3.算法基本执行步骤1:找到初始的无序数组中最下的数,将其放在数组的头部。交换最小数和数组头部元素即可(这是与冒泡有区别的地方)。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 /*
 5  * 简单选择排序一句话概括:每次选择无序数列中最小的将其放在有序数列的最后。
 6  * 二、在简单选择排序中,我们用初始化的数字int a[6]={2,5,6,3,1,4}
 7  * 三、算法基本执行步骤1:找到初始的无序数组中最下的数,将其放在数组的头部。交换最小数和数组头部元素即可(这是与冒泡有区别的地方)。
 8  */
 9 
10 //替换
11 void swap(int a[],int i,int j){
12     int temp = a[i];
13     a[i] = a[j];
14     a[j] = temp;
15 }
16 
17 //快速排序
18 void select_sort(int a[],int l)
19 {
20     // l = 6
21     int i,temp,j,k;
22     /*
23      * 推导过程 2,5,6,3,1,4
24      * i = 0 temp = 2 ,k =0 搜索到最小值1, k = 4 -> 1,5,6,3,2,4
25      * i = 1 temp = 5 ,k =1搜索到最小值2, k = 4   ->   1,2,6,3,5,4
26      * i = 2 temp = 6 ,k =2搜索到最小值3  k = 3 ->   1,2,3,6,5,4
27      * i = 3 temp = 6 ,k =3搜索到最小值4  k = 5 ->   1,2,3,4,5,6
28      * i = 4 temp = 5 ,k =4搜索不到   k = 4    k和i相同不做任何操作
29      */
30 
31     //最后一次不用循环
32     for (i=0;i<l-1;i++){
33         //获取头元素的值
34         temp = a[i];
35         k = i;
36 
37         //printf("%d\n",temp);
38         //从第i+1 元素开始查找,如果找到比首元素小就替换
39         for (j = i+1;j<l;j++){
40 
41             if (a[j] < temp){
42                 //先记录下来最小值
43                 temp = a[j];
44                 k = j; //最小值的下标
45             }
46         }
47 
48         //替换
49         if ( i != k )
50             swap(a,i,k);
51     }
52 
53 }
54 
55 void main()
56 {
57     int a[] = {2,5,6,3,1,4};
58     int i,l = sizeof(a) / sizeof(int);
59 
60     //选择排序
61     select_sort(a,l);
62 
63     printf("选择排序后:\n");
64     for ( i = 0; i < l; ++i) {
65         printf("%d\n",a[i]);
66     }
67 
68 }

 

 
posted on 2016-11-10 17:37  睡着的糖葫芦  阅读(1654)  评论(0编辑  收藏  举报