选择排序
1 template <typename T> 2 void SelectSort(T *a, int nCount) 3 { 4 int nMinIndex = 0;//标识最小项的索引 5 T temp; 6 for(int i=0;i<nCount-1;i++) 7 { 8 nMinIndex = i; 9 for(int j=i+1;j<nCount;j++) 10 { 11 if(a[nMinIndex]>a[j]) 12 { 13 nMinIndex = j; 14 } 15 } 16 if(nMinIndex!=i){ 17 temp = a[nMinIndex]; 18 a[nMinIndex] = a[i]; 19 a[i] = temp; 20 //swap(a[nMinIndex],a[i]);//也可以用该函数代替上面三句 21 } 22 } 23 } 24 int main(int argc, char* argv[]) 25 { 26 int a[] = {4,3,6,7,1}; 27 SelectSort(a,5); 28 for(int i=0;i<5;i++) 29 printf("%d ",a[i]); 30 printf("\n"); 31 return 0; 32 }
精髓: 通过操作下标来标记最小的数据项,从而减少数据交换
难点: 开辟额外的4字节空间来保存最小值索引
注意: 交换数据时记得判断nMinIndex!=i,减少不必要的交换
浙公网安备 33010602011771号