您的位置:首页 > 其它

插入排序的时间复杂度分析

2014-12-06 00:32 302 查看
#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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  插入排序 迭代 c
相关文章推荐