插入排序的时间复杂度分析
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实现和时间复杂度分析
- LeetCode-Sort List,链表排序(插入和归并),时间复杂度O(n^2) and O(nlgn)
- 选择排序的时间复杂度分析
- MIT:算法导论——4.2快速排序 以及 排序算法时间复杂度分析
- c语言实现线性表的建立,初始化,插入,删除,查找,遍历以及时间复杂度分析
- 直接插入排序算法c语言实现。 己它的时间复杂度分析。
- 浅谈直接插入排序算法思想以及时间复杂度分析
- java版排序算法简介及冒泡排序以及优化,选择排序,直接插入排序,希尔排序,堆排序,快速排序及其优化前言 2 分类 2 稳定性 3 时间复杂度 4 Java实现版本 5 1、冒泡排序 6 2、选择排序
- 插入排序及其复杂度分析
- 快速排序和冒泡排序的时间复杂度分析(C++算法实现对比)
- 冒泡,选择,插入,时间复杂度O(n2)算法感悟(此博文属于对于排序过程有大概了解的同学)
- 七种排序方法(稳定性、空间复杂度、时间复杂度)分析总结
- 红黑树的插入和遍历时间复杂度分析
- 归并排序及其时间复杂度分析
- 归并排序及其时间复杂度分析
- 【学习笔记】python版选择排序和插入排序及时间复杂度分析
- 快速排序不同输入规模时间复杂度分析
- 选择排序的时间复杂度分析
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)