#include <stdio.h>
#define LEN 5
int a[LEN] = { 10, 5, 2, 4, 7 };
void insertion_sort(void)
{ // cost time
int i, j, key;
for (j = 1; j < LEN; ++j) { // c1 n
key = a[j]; // c2 n-1
i = j - 1; // c4 n-1
while (i >= 0 && a[i] > key) {<span style="white-space:pre"> </span>// c5
//j == 2, 3, 4, 5, ... , n tj - 第j次迭代所需次数?
a[i+1] = a[i]; // c6
--i; // c7
}
a[i+1] = key; // c8 n-1
}
printf("%d, %d, %d, %d, %d\n",
a[0], a[1], a[2], a[3], a[4]);
}
int main(void)
{
insertion_sort();
return 0;
}
总的复杂度,便是T(n) = c1n + c2(n-1) + c4(n-1) + c5*sigma(n, j, 2, t[j]) + c6*sigma(n, j, 2, t[j]-1) + c7*sigma(n, j, 2, t[j]-1) + c8(n-1)
很明显,最好情况(已经排好了)那就是一下就过,t[j] == 1,上式简化成(c1 + c2 + c4 + c5 +c8)*n - (c2 + c4 + c8),这是线性函数,所以属于Θ(n)
那如果是最坏情况呢?这时候t[j] == j,都要执行j次,上式变形,得到一二次函数属于Θ(n^2)