算法导论 第八章 线性时间排序

本文深入探讨了线性时间排序的概念,包括决策树在排序算法中的应用,介绍了计数排序、基数排序和桶排序等非比较排序算法。计数排序保证了稳定性,基数排序通过按位进行稳定排序实现效率,而桶排序利用随机变量指示器来求解复杂度。
摘要由CSDN通过智能技术生成

def:之前所有的排序算法中,各元素的次序依赖于它们之间的比较,我们把这类排序算法称为比较排序算法。

8.1.排序算法的下界

def:决策树是一棵二叉树,它可以表示在给定输入规模情况下,某一特定排序算法对所有元素的比较操作。即将所有比较后的次序描述为一条到达叶子节点的路径,而这个路径唯一,叶子节点的排列也是唯一的,对n个元素的排列有n!种排列,叶子节点的个数也为n!与排列数相同可以一一对应。


ps:书上说决策树是一棵完全二叉树,但是给的配图却是非完全二叉树,根绝上下文的描述来看决策树叶并非是一棵完全二叉树。


8.2. 计数排序

假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。对每个输入元素x,确定小于x的元素的个数,利用这一个信息就可以直接把x放到它输出数组的位置上。

def COUNTING_SORT(A, B, k):
    #初始化
    C = [0 for i in range(0, k+1)]
    #确定每个元素的个数
    for j in range(0, len(A)):
        C[A[j]] = C[A[j]] + 1
    #确定小于某个元素的个数
    for i in range(1, k+1):
        C[i] = C[i] + C[i-1]
    #输出到对应的位置上,并调整小于该元素的个数
    for j in range(len(A)-1, -1, -1):
        B[C[A[j]]-1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值