排序原理:
当插入第i(i>=1)个元素时,前面的i-1个元素已经排序好,此时用第i个元素的值与第i-1,i-2个元素的值进行比较,找到插入位置就可将第i个元素插入,原来位置的元素顺序后移
图解:
(假设原数组为:5,2,4,6,3,1)
图画的略微有点敷衍,大家凑合着看
代码实现:
#include<iostream>
#include<vector>
using namespace std;
void InsertSort(vector<int>& v, int left, int right){
for (int i = left + 1; i < right; i++){
int end = i;
while (end > left && v[end] < v[end - 1]){
swap(v[end], v[end - 1]);
end--;
}
}
}
int main()
{
int size = 0;
cin >> size;
vector<int> v(size, 0);
for (int i = 0; i < size; i++){
cin >> v[i];
}
InsertSort(v, 0, size);
for (auto& e : v){
cout << e << " ";
}
system("pause");
return 0;
}
结果展示:
特性总结:
- 元素集合越接近有序,直接插入排序算法时间效率越高
- 时间复杂度:O(N^2)
- 空间复杂度:O(1)
- 是一种稳定的排序算法