选择排序

1、思路:对于当前第一个数,假定它是最小的,遍历后面的数,发现比当前数还小的,进行交换,这样就保证了当前第一个为最小的。

2、代码:

 1 template <typename T>

 2 void SelectSort(vector<T>& vec)

 3 {

 4     for(int i=0; i< vec.size();i++)

 5     {

 6         T min = vec[i];

 7         for(int j=i+1;j < vec.size();j++)

 8         {

 9             if(vec[j]<min)

10             {                

11                 min = vec[j];

12                 vec[j] = vec[i];

13                 vec[i] = min;

14             }

15         }

16     }

17 }

3、上述代码,存在问题:交换上来的元素还可能不是最小的,会导致多次交换。解决办法是,发现更小的之后,不交换,而是记录最小的下标,最后找到最小的下标,然后交换。代码:

 1 template <typename T>

 2 void SelectSort_2(vector<T>& vec)

 3 {

 4     for(int i=0; i< vec.size();i++)

 5     {

 6         int index_Min = i;

 7         for(int j=i+1;j < vec.size();j++)

 8         {

 9             if(vec[j]<vec[index_Min])

10             {                

11                 index_Min = j;

12             }

13         }

14 

15         if(index_Min != i)

16         {

17             swap(vec,i,index_Min);

18         }        

19     }

20 }

 

你可能感兴趣的:(选择排序)