之前在冒泡排序的附录中提到可以在每次循环时候,不用交换操作,而只需要记录最小值下标,每次循环后交换哨兵与最小值下标的书,
这样可以减少交换操作的时间。
这种方法针对冒泡排序中需要频繁交换数组数字而改进。
以此类推。。。
代码:
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 }