1 问题

至此,总结一下已经研究过的排序算法:

insertion sort,Θ(n2)\Theta(n^2)Θ(n2)
merge sort, Θ(nlogn)\Theta(nlogn)Θ(nlogn)
quicksort, Θ(nlogn)\Theta(nlogn)Θ(nlogn)
heapsort,Θ(nlogn)\Theta(nlogn)Θ(nlogn)

  • 从上面这个现象发现,这些算法的算法复杂度≥Θ(nlogn)\ge\Theta(nlogn)≥Θ(nlogn);
  • 从算法的细节上看,算法的最基本的思想是比较元素大小

从上面的发现中,可以提出这样一个猜想:

所有基于比较的排序算法,算法复杂度≥Θ(nlogn)\ge\Theta(nlogn)≥Θ(nlogn)。

2 证明结论

数学证明的思路分两步,1⃣️找到一种更加抽象的数学结构表达各种基于比较排序算法;2⃣️研究这种抽象的数学结构的性质;3⃣️利用得到的性质说明结论。

2.1 Decision-tree(抽象数学结构)

这个决策树和Machine Learning里的决策树本质上是一个意思。

  • 先看一个简单的例子
  • 三个元素的Decision-tree很容易画出,但是≥4\ge4≥4就不容易画出了,因为有Cn2C_n^2Cn2​种比较,而每一次比较又有两种结果,这些比较的结果中一部分就可以决定全序…,已经超出人脑处理范畴,计算机也不太容易处理;
  • 仔细品品基于比较的排序算法,也是一顿比较之后确定一个全序,而这顿比较恰恰是Decision-tree所有比较之一,也就是Decision-tree的一条路径;
  • 不过我们不必过于纠结Decision-tree的细节结构,只需要知道它的存在性就足够解决我们今天的问题了,这就是数学抽象之美;

2.2 Decision-tree的数学性质

2.3 结论得证

决定基于比较的排序算法的复杂度是比较的次数,用decision tree就是某一个路径的高度hhh,现在已经证明整个二叉树的高度h≥Ω(nlogn)h\ge\Omega(nlogn)h≥Ω(nlogn),那就说明基于比较的排序算法的复杂度≥Ω(nlogn)\ge\Omega(nlogn)≥Ω(nlogn)。

3 强调重点

  • 决定基于比较的排序算法的复杂度是比较的次数;
  • 在input确定的情况下,某种基于比较的排序算法的比较序列和decision tree的结构可以确定,该算法的比较序列只是decision tree的某一条路径;
  • 基于比较的排序算法随机化后仍符合上面的逻辑框架,结论仍然成立;

七、基于比较的排序算法总结相关推荐

  1. c语言排序算法 应用与实现,基于C语言排序算法改进与应用.doc

    基于C语言排序算法改进与应用 基于C语言排序算法改进与应用 摘 要:介绍了程序语言中排序的原理及应用,阐述了基于C语言的三种主要排序方法,提出了每种排序方法的改进,计算出改进后算法的时间复杂度,编写了 ...

  2. 基于使用学习排序算法的Web服务学习的个性化的决策战略

    摘要----为了从类似的服务列表中进行功能上的选择,用户往往需要根据多个QoS准则做出他们的决定,它们需要对目标服务.在这个过程中,不同的用户可能遵循不同的决策策略,有些是补偿性的,在这个补偿中在所有 ...

  3. 七种常见的排序算法总结

    目录 引言 1.什么是排序? 2.排序算法的目的是什么? 3.常见的排序算法有哪些? 一,插入排序 1.基本思想 2.代码实现 3.性能分析 4.测试 二,希尔排序(缩小增量排序) 1.基本思想 2. ...

  4. C语言实现基于查找和排序算法的学生成绩分析

    1.编写程序将自己学号后面的8位同学的学号.姓名以及数学.英语和数据结构的成绩信息保存到学生成绩表中.如果学号后面没有8位同学,就用学号在班级最前面的学生依次补齐,例如学号为189000248号张二同 ...

  5. 算法:基于比较的排序算法

    1.冒泡排序: (1)平均时间复杂度:O(n2) (2)最好时间复杂度:O(n) (3)最坏时间复杂度:O(n2) (5)空间复杂度:O(1) (5)稳定性:稳定 (6)JavaScript实现: f ...

  6. 基于比较的排序算法集

    #include <iostream> using namespace std;#define SWAP(i,j) {int t=(i);(i)=(j);(j)=t;}//插入排序 voi ...

  7. 【数据结构】万字解析!如何用Java实现七种常见的排序算法!

    目录 1.直接插入排序 思路: 代码以及解析 2.希尔排序 思路 代码以及解析 3.选择排序 思路1 代码1以及解析 思路2 代码2以及解析 4.冒泡排序 思路 代码 5.堆排序 思路 代码以及解析 ...

  8. 基于比较的常见的排序算法

    目录 写在前面 排序 稳定性 排序的分类 常见的基于比较的排序 直接插入排序 代码 性能分析 总结 代码优化 折半插入 希尔排序 希尔排序 如何分组 代码 性能分析 选择排序 代码 性能分析 双向选择 ...

  9. 排序算法之计数排序、基数排序和桶排序

    转自:http://www.cnblogs.com/ttltry-air/archive/2012/08/04/2623302.html 计数排序,基数排序,桶排序等非比较排序算法,平均时间复杂度都是 ...

最新文章

  1. wince下实现wifi无线网络的连接和配置(WLAN)
  2. 编码互换变量c语言,【剑仙教程】TC。字符 和字符编码 互换。
  3. 不会出现这样的情况吧
  4. Linux时间 时区 同步
  5. mysql workbench启动_怎么启动mysql workbench
  6. c+ +三角函数_C ++中的三角函数
  7. [前端漫谈_4] 从 薛定谔的猫 聊到 Event loop
  8. [转载]帮你入门 详解JRE和JDK的区别
  9. Python爬取Boss直聘,帮你获取全国各类职业薪酬榜
  10. 烂泥:centos6.4服务器添加新硬盘
  11. 谈谈我对-大学-游戏-追名逐利-等10个话题的一些简要看法
  12. tikz画GPS卫星电文通信结构图
  13. python替换字符的操作_Python中的字符串替换操作示例
  14. 计算机配置文件损坏,怎样修复Windows 10的用户配置文件无法加载错误?
  15. SSh框架的整合流程
  16. 社交App系统架构--自己亲手写的App系统(含github源码)
  17. ARFoundation系列讲解-教程目录
  18. 十大开源安全测试工具
  19. 计算机编辑视频用什么配置文件,AE/PR剪辑视频需要什么电脑配置?适合剪辑视频的电脑配置推荐...
  20. 有哪些实用的文字转语音工具值得推荐?收藏了

热门文章

  1. 前端学习(1002):简洁版滑动下拉菜单问题解决
  2. 第三十四期:花了一个星期,我终于把RPC框架整明白了!
  3. 54include对象
  4. ls mac 显示最近修改日期_Find Any File for Mac(Mac本地文件搜索工具)
  5. vue使用better-scroll实现下拉刷新、上拉加载
  6. 小程序input实现数据双向绑定
  7. d3.js(相当于svg的JQ)
  8. https无法访问 宝塔_宝塔面板快速开启ssl(https)的方法
  9. [Python] 制作启动uiautomator2 的web版 uiautomatorviewer2 批处理启动
  10. Tomcat服务器的安装及配置