还是O(n^2),但比较次数因输入而异,所以是输入敏感型算法。插入时需要部分元素后移所以效率低。
很有用,是输入敏感的可以被某些排序算法用于局部排序,且可用于逆序数的计算。
#include<iostream>//插入排序//前面的0--(i-1)是有序的,现在用i和他们逐个比较。
#include<vector>
using namespace std;
int insertionsort(vector<int>& a) {
int count = 0; //用于记录逆序数做返回值
for (int i = 1; i < a.size(); i++) { //每次逐个进行对比,找出最靠前的小于位置插入。
for (int j = 0; j < i; j++) {
if (a[j]>a[i]) {
int tmp = a[i];
count += i - j;
for (int k = i ; k >=j+1; k--) { //整体后移空出位置
a[k] = a[k - 1];
}
a[j] = tmp;
}
}
}
return count;
}
int main() {
vector<int> a{ 2,8,0,3 };
cout<<insertionsort(a);
cout << endl;
for (auto& e : a)cout << e;
cout << endl;
}