插入排序的时间复杂度为O(N^2),和冒泡排序的时间复杂度相同,但是在某些情况下插入排序会更优。
插入排序的原理是:第1次在0~0范围内排序,第2次在0~1范围内排序,第3次在0~2范围内排序……相当于每次排序时都比上一次排序多一个数,每次排序只要比较这个多出来的数与前几个数的大小(插入前几个数),而前几个数已经排好了。
#include<iostream>
#include<vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> s(n);
for (int i = 0; i < n; i++)cin >> s[i];
for (int i = 1; i < n; i++) {
for (int j = i - 1; j >= 0; j--) {
if (s[j] > s[j + 1]) {
s[j] = s[j] ^ s[j + 1];
s[j + 1] = s[j] ^ s[j + 1];
s[j] = s[j] ^ s[j + 1];
}
}
}
for (int i = 0; i < n; i++) cout << s[i] << " ";
return 0;
}