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

来源:互联网 发布:淘宝手机售后维修 编辑:程序博客网 时间:2024/05/11 02:29

#include <stdio.h>#define LEN 5int a[LEN] = { 10, 5, 2, 4, 7 };void insertion_sort(void){//costtimeint i, j, key;for (j = 1; j < LEN; ++j) {//c1nkey = a[j];//c2n-1i = j - 1;//c4n-1while (i >= 0 && a[i] > key) {<span style="white-space:pre"></span>//c5//j == 2, 3, 4, 5, ... , ntj - 第j次迭代所需次数?a[i+1] = a[i];//c6--i;//c7}a[i+1] = key;//c8n-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)


0 0