算法学习记录-排序——选择排序(Simple Selection Sort)

之前在冒泡排序的附录中提到可以在每次循环时候,不用交换操作,而只需要记录最小值下标,每次循环后交换哨兵与最小值下标的书,

这样可以减少交换操作的时间。

这种方法针对冒泡排序中需要频繁交换数组数字而改进。

 

以此类推。。。

 

代码:

 1 void selectionSort(myDataType *ary,int len)
 2 {
 3     int i,j;
 4     int mymin;    //记录最小值下标
 5     for (i=0;i<len;i++) // 哨兵下标
 6     {
 7         mymin = i;
 8         for (j=i+1;j<len;j++) //欲比较的下标
 9         {
10             if (ary[mymin] > ary[j])
11             {
12                 mymin = j;
13                 
14             }
15         }
16         if (i != mymin)
17         {
18             myDataType temp;
19             temp = ary[i];
20             ary[i] = ary[mymin];
21             ary[mymin] = temp;
22         }
23     }
24 }

 

全部代码:

 1 #include "stdafx.h"
 2 
 3 
 4 typedef int myDataType;
 5 myDataType src_ary[10] = {9,1,5,8,3,7,6,0,2,4};
 6 
 7 void prt_ary(myDataType *ary,int len)
 8 {
 9     int i=0;
10     while(i < len)
11     {
12         printf(" %d ",ary[i++]);
13     }
14     printf("\n");
15 }
16 void selectionSort(myDataType *ary,int len)
17 {
18     int i,j;
19     int mymin;    //记录最小值下标
20     for (i=0;i<len;i++) // 哨兵下标
21     {
22         mymin = i;
23         for (j=i+1;j<len;j++) //欲比较的下标
24         {
25             if (ary[mymin] > ary[j])
26             {
27                 mymin = j;
28                 
29             }
30         }
31         if (i != mymin)
32         {
33             myDataType temp;
34             temp = ary[i];
35             ary[i] = ary[mymin];
36             ary[mymin] = temp;
37         }
38     }
39 }
40 int _tmain(int argc, _TCHAR* argv[])
41 {
42     printf("before sort:\n");
43     prt_ary(src_ary,10);
44 
45     selectionSort(src_ary,10);
46     
47     printf("after sort:\n");
48     prt_ary(src_ary,10);
49 
50 
51 
52     getchar();
53     return 0;
54 }

 

 

 

 

posted @ 2013-12-04 16:20  sjdang  阅读(278)  评论(0编辑  收藏  举报