插入排序 C++实现

来源:互联网 发布:lol数据受损 编辑:程序博客网 时间:2024/04/25 07:08

写给自己!!
插入排序算法,其如同打牌,手里总是已经排好续的牌,而桌面上的是未知牌,其思想是:拿起一张牌,与手中的牌从右到左(从大到小)进行比较,找到合适的位置插入即可。插入排序算法没有合并排序算好效率高,他随着输入的增大而增大。
代码思想:对于将要插入的第j个元素,与已经排序好的0…j-1个元素从j-1处开始比较,如果j-1比j的元素大,则将j-1处的元素往后移一个位置,依次比较,找到j的元素合适的位置,插入即可。代码如下:

    void Insert::InsertSort(vector<int>& coll){    int count = coll.size();     for(int j=1;j<count;j++)     {          int key = coll[j];          int i=j-1;          while(i>=0 && coll[i]>key)          {               coll[i+1]=coll[i];               i--;          }          coll[i+1]=key;     }     for(auto pos=coll.begin();pos!=coll.end();++pos)     {         cout<<*pos<<' ';     }       }

coll为待排序,插入排序是一种原地排序算法。先把第j个元素取出来给一个临时变量,这样一直向后移的时候就会出现一个空位置,例如把j-1的元素移到j处,就空了一个j-1的位置,其实实际上是有值的,此时coll[j-1]=coll[j],若此时while条件不成立时,把key赋值给coll[j-1]即可。
这里是两层循环,外层循环是对待排序的数组的每一个元素进行遍历,内层循环是对已经排序好的元素中找到即将要插入的元素的位置。

0 0
原创粉丝点击