时光飞逝~

选择排序
 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 }
View Code

精髓: 通过操作下标来标记最小的数据项,从而减少数据交换

难点: 开辟额外的4字节空间来保存最小值索引

注意: 交换数据时记得判断nMinIndex!=i,减少不必要的交换

posted on 2013-07-10 00:50  时光飞逝~  阅读(114)  评论(0)    收藏  举报