排序算法总结

目录

  • 1.比较型排序算法对比
  • 2.比较排序算法的下界
    2.1 算法导论提供的解释
    2.2 刘未鹏提供的解释
  • 3.快排为什么那么快?
    3.1 为什么堆排比快排慢
    3.2 为什么快排其实也不是那么快
    3.3 计数排序、桶排序为什么那么快?
  • 4.一种看问题的视角
  • 5.排序算法的应用

1.比较型排序算法对比

排序算法对比

2.比较排序算法的下界

2.1 算法导论提供的解释

在一个比较排序算法中,只使用元素间的比较来获得输入序列<a1, a2, ... , an>中元素间次序的信息。
比较排序可以抽象成一颗决策树,决策树是一颗完全二叉树,它可以表示在给定输入规模的情况下,某一特定排序算法对所有元素的比较操作。


在决策树中,每个内部节点都以i:j标记,其中, 1≤i, j ≤n,n是输入序列中的元素个数。每个叶节点都标注了一个序列<Π(1), Π(2), ..., Π(n),>。排序算法的执行对应于一条从树的根节点到叶节点的路径。每一个内部节点表示一次比较ai≤aj。左子树表示一旦我们确定ai≤aj之后的后续比较,右子树表示在确定了ai>aj后的后续比较。当到达一个叶节点时,表示排序算法已经确定了一个顺序:


最坏情况的下界:
在决策树中,从根节点到任意一个可达叶节点之间最长简单路径的长度,表示的是对应的排序算法中最坏情况下的比较次数。也即决策树的高度。


2.2 刘未鹏提供的解释

排序的本质:一组未排序的n个数字,它们一共有n!种排序,其中只有一种排列是从小到大排列。

比较排序:任何基于比较的排序基本操作单元都是“比较a和b”,输出只有两种答案。一个只有两种输出的问题最多只能将可能性空间切成两半,最佳的切法是切成1/2和1/2。

最优下界:我们希望每次比较a和b时,a<b和a>b的概率是均等的,这样我们就能保证无论无任何都能讲可能性缩小为原来的一半。

  • log_2(n!) = nlogn

3.快排为什么那么快?

3.1 为什么堆排比快排慢

堆排的步骤:

  • step1.建立最大堆(堆顶的元素大于两个儿子,两个儿子又分别大于它们各自下属的两个儿子...)
  • step2.将堆顶的元素和最后一个元素对调(相当于将堆顶拿走,然后将堆底的那个元素补上空位,然后让那最后一个元素从顶上往下滑到恰当的位置,重新成为最大堆)
  • step3.重复第二步

堆底的元素肯定很小,将它拿到堆顶和原本属于最大元素的两个子节点比较,它比它们大的可能性是微乎其微的。这一次的比较结果是概率不均等的。
实际上该元素肯定小于其中的一个儿子(从一颗子树的最底下取出的),而大于另一个儿子的可能性非常小。

改进版:MacKay提供了一个修改版的堆排,每次不是将堆底的元素拿上来,而是直接比较堆顶元素的两个儿子,选出次大的元素。(这个怎么实现?如下图所示)


3.2 为什么快排其实也不是那么快

快排的过程:
随机选择一个轴元素,将所有大于轴元素的移到左边,其余移到右边。

快排的第一次比较是将一个元素和轴元素比较,这个时候“大于”和“小于”各占一半。
快排的第二次比较a2与pivot比较,不妨令a1 < pivot,就有三种不同的情况
a2 < pivot: a1 < a2 < pivot; a2 < a1 < pivot 这个可能性占了2/3
a2 > pivot: a1 < pivot < a2这个可能性占了1/3
因此不是等概率的划分可能性空间

3.3 计数排序、桶排序为什么那么快?

当i张牌放到位之后,放置第i+1张牌的时候有多少种可能性?大约i+1中。因为前i张牌将13个位置分割成了i+1个区间。因此计数排序砍掉了i/i+1种可能性。

4.一种看问题的视角

将排序问题看成和猜数字一样,是通过问问题来缩小/排除结果的可能性区间。
“最好的问题”就是那些能够均分所有可能性的问题,因为能排除掉k-1/k种可能性,而不均衡的问题会有一个或者一些答案分支排除掉的可能性少于k-1/k,于是策略的下界就被拖累了。

5.排序算法的应用

5.1 商业计算

5.2 信息搜索

有序的信息确保可以用经典的二分查找法进行高效的搜索。
查找、搜索——二分查找的各种扩展——各种搜索树。

5.3 运筹学

5.4 事件驱动模拟


5.5 数值计算

5.6 组合搜索

5.7 排序和优先队列在算法设计领域的应用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者:大海里的太阳原文地址:http://www.cnblogs.com/wxisme/ 前言 查找和排序算法是算...
    IT程序狮阅读 7,237评论 0 63
  • 一、概述 排序算法概念 在计算机科学与数学中,一个排序算法是将一组杂乱无章的数据按一定的规律顺次排列起来的算法。排...
    简书冷雨阅读 4,685评论 0 0
  • 简单排序 冒泡排序:循环遍历左右比较,较小者左移或较大者后移; 选择排序:在未排序序列中找到最小者元素一次放到已排...
    王然Gondole阅读 5,232评论 0 2
  • 就在昨天,老妈和我微信视频,说:听说你买了一辆车。可不是吗?我终于买了一辆自行车。哈哈哈哈,两人不约大笑。 我买了...
    木木木侠阅读 4,525评论 0 4
  • 金灿灿的玉米囤满农家的庭院 红通通的小枣晾晒在屋前院后 黑黝黝的豆儿装好袋子聚在屋檐下 丰收!今年的秋,农家院落显...
    丰盈仓廪阅读 4,300评论 0 0