插入排序 C++实现
2015-12-04 10:54
281 查看
写给自己!!
插入排序算法,其如同打牌,手里总是已经排好续的牌,而桌面上的是未知牌,其思想是:拿起一张牌,与手中的牌从右到左(从大到小)进行比较,找到合适的位置插入即可。插入排序算法没有合并排序算好效率高,他随着输入的增大而增大。
代码思想:对于将要插入的第j个元素,与已经排序好的0…j-1个元素从j-1处开始比较,如果j-1比j的元素大,则将j-1处的元素往后移一个位置,依次比较,找到j的元素合适的位置,插入即可。代码如下:
coll为待排序,插入排序是一种原地排序算法。先把第j个元素取出来给一个临时变量,这样一直向后移的时候就会出现一个空位置,例如把j-1的元素移到j处,就空了一个j-1的位置,其实实际上是有值的,此时coll[j-1]=coll[j],若此时while条件不成立时,把key赋值给coll[j-1]即可。
这里是两层循环,外层循环是对待排序的数组的每一个元素进行遍历,内层循环是对已经排序好的元素中找到即将要插入的元素的位置。
插入排序算法,其如同打牌,手里总是已经排好续的牌,而桌面上的是未知牌,其思想是:拿起一张牌,与手中的牌从右到左(从大到小)进行比较,找到合适的位置插入即可。插入排序算法没有合并排序算好效率高,他随着输入的增大而增大。
代码思想:对于将要插入的第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]即可。
这里是两层循环,外层循环是对待排序的数组的每一个元素进行遍历,内层循环是对已经排序好的元素中找到即将要插入的元素的位置。
相关文章推荐
- C++知识点
- What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR (etc.)?
- Cpp--改造多重继承
- C\C++中的整形提升
- C++ Lambda表达式的使用方法
- 合并排序 C++实现
- C++ Template 中的typename、class关键字
- __FILE__,__LINE__,__DATE__,__TIME__,__FUNCTION__调试宏
- C/C++代码调试的几点建议
- C/C++代码调试的几点建议
- C++问题-无法打开某个自定义源文件
- C++11的多线程
- C语言基础
- C++问题-无法打开包括文件:“GLES2/gl2.h”
- 设计模式系列(四)简单工厂模式(Simple Factory Pattern/Static Factory Method)
- C++问题-Qt Visual Studio Add-in
- php与c++一些共同性!
- 编译原理(十) SLR文法分析法(算法原理和C++实现)
- c++/c实现线程池
- VS C++ 控件使用