插入排序
一、题目描述
给定一个数组 in,请实现插入排序算法。
示例:
输入: in = [3,4,2,1,5,0]
输出: ret = [0,1,2,3,4,5]
题目来自算法导论第三版第二章 算法基础。
二、解题思路及代码实现
1、解题思路
我们打扑克牌的时候,右手摸牌,左右拿已有的牌,每摸一张牌,就按顺序插入到左手中,当所有牌摸完时,左手的牌都是按顺序排好的。插入排序的思想也是一样,每处理一个新数据时,其左侧数据总是排好序的,把新的数据插入到合适位置后,继续处理下一个新数据,直到处理完所有数据,这样,处理完所有数据的时候,左侧的数据就全部排序完成。
2、C++代码实现
vector<int> insertion_sort(vector<int> in) {
for (int j = 1; j < in.size(); j++) {
int key = in.at(j);
int i = j - 1;
while (i >= 0 && in.at(i) > key) {
in[i+1] = in[i];
i--;
}
in[i+1] = key;
}
return in;
}
三、提交结果
是书上的例子,无提交结果。
总结
插入排序算是最简单的一种排序算法,其时间复杂度为O(N*N)。