zoukankan      html  css  js  c++  java
  • 选择排序

    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 }
  • 相关阅读:
    ambari
    linux常用命令
    scala新版本学习(3)
    Spring中的AOP
    Spring中的Bean
    Spring的基本应用(1):依赖以及控制反转
    Scala新版本学习(2):
    python之time模块
    python之编码与解码
    爬虫之re数据提取的使用
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3423865.html
Copyright © 2011-2022 走看看