#include <iostream>
using namespace std;
int main() {
int a[] = {4, 5, 3, 2, 8, 9, 0, 1};
// 插入排序
for (int i = 1; i < sizeof(a) / sizeof(int); i++) {
for (int j = 0; j < i; j++) {
// 递减
if (a[j] > a[i]) {
int tmp = a[i];
// 移动
for (int k = i; k > j; k--) {
a[k] = a[k - 1];
}
// 交换
a[j] = tmp;
}
}
}
// 输出顺序
for (int i = 0; i < sizeof(a) / sizeof(int); i++) {
cout << a[i] << endl;
}
return 0;
}
0
1
2
3
4
5
8
9
算法复杂度:O(n2)
最好情况:输入 a 已经是一个排好序的序列, T(n) = n - 1
最坏情况:输入 a 是反向排好的序列,T(n) =
Σ
k
=
2
2
(
k
−
1
)
\Sigma^2_{k=2}(k - 1)
Σk=22(k−1) =
n
(
n
−
1
)
2
\frac{n(n - 1)}{2}
2n(n−1) =
Θ
(
n
2
)
\Theta (n^2)
Θ(n2)
平均情况: 插入 a[k] 需要的平均比较次数:
1
k
Σ
j
=
1
2
j
=
k
+
1
2
\frac{1}{k}\Sigma^2_{j = 1}j = \frac{k + 1}{2}
k1Σj=12j=2k+1
平均复杂度:
Σ
k
=
2
n
k
+
1
2
=
n
(
n
−
1
)
4
+
n
−
1
=
Θ
(
n
2
)
\Sigma^n_{k=2}\frac{k +1}{2} = \frac{n(n - 1)}{4} + n - 1 = \Theta(n^2)
Σk=2n2k+1=4n(n−1)+n−1=Θ(n2)
优点:简单,容易实现;稳定排序;原地排序(空间复杂度为1)
缺点:时间复杂度为
Θ
(
n
2
)
\Theta(n^2)
Θ(n2)