您的位置:首页 > 编程语言 > C语言/C++

插入排序 C++实现

2015-12-04 10:54 281 查看
写给自己!!

插入排序算法,其如同打牌,手里总是已经排好续的牌,而桌面上的是未知牌,其思想是:拿起一张牌,与手中的牌从右到左(从大到小)进行比较,找到合适的位置插入即可。插入排序算法没有合并排序算好效率高,他随着输入的增大而增大。

代码思想:对于将要插入的第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]即可。

这里是两层循环,外层循环是对待排序的数组的每一个元素进行遍历,内层循环是对已经排序好的元素中找到即将要插入的元素的位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: