开发者社区 问答 正文

基于比较的排序的时间复杂度下限是多少

基于比较的排序的时间复杂度下限是多少

展开
收起
知与谁同 2018-07-16 15:17:04 3183 分享 版权
2 条回答
写回答
取消 提交回答
  • 基于比较的排序算法是不能突破O(NlogN)的。简单证明如下:
    N个数有N!个可能的排列情况,也就是说基于比较的排序算法的判定树有N!个叶子结点,比较次数至少为log(N!)=O(NlogN)(斯特林公式)。
    2019-07-17 22:50:52
    赞同 展开评论
  • 杀人者,打虎武松也。
    原因:
    对于n个待排序元素,在未比较时,可能的正确结果有n!种。
    在经过一次比较后,其中两个元素的顺序被确定,所以可能的正确结果剩余n!/2种。
    依次类推,直到经过m次比较,剩余可能性n!/(2^m)种。
    直到n!/(2^m)<=1时,结果只剩余一种。此时的比较次数m为o(nlogn)次。
    所以基于排序的比较算法,最优情况下,复杂度是o(nlogn)的。
    2019-07-17 22:50:52
    赞同 展开评论
问答地址: