排序问题——线性时间复杂度排序

目录

  • 一、计数排序
    1.问题分析并选择合适的数据结构
    2.算法正确性的证明
    3.算法的分析
  • 二、基数排序
    1.问题分析并选择合适的数据结构
    2.算法正确性的证明
    3.算法的分析
  • 三、桶排序
    1.问题分析并选择合适的数据结构
    2.算法正确性的证明
    3.算法的分析

问题定义

一、计数排序

1.问题分析并选择合适的数据结构

计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。当k=O(n),排序时间为线性时间。

计数排序的基本思想:对每一个元素x,确定小于x的元素个数。

在计数排序算法代码中,假设输入是一个数组A[1..n],A.length=n。我们还需要两个数组:B[1..n]存放排序的输出,C[0..k]提供临时存储空间。


2.算法正确性的证明

3.算法的分析

当k=O(n),排序时间为线性时间。

二、基数排序

1.问题分析并选择合适的数据结构

与人们的直观感受相悖,基数排序是先按最低有效位进行排序来解决卡片排序问题的。从低位到高位进行。
因此,为了确保基数排序的正确性,一位数排序算法必须是稳定的。

基数排序的代码是非常直观的。假设n个d位元素存放在数组A中,其中第1位是最低位,第d位是最高位。


2.算法正确性的证明

3.算法的分析


三、桶排序

1.问题分析并选择合适的数据结构

桶排序假设输入数据服从均匀分布,平均情况下它的时间代价为O(n)。
计数排序假设输入属于一个小区间内的整数,而桶排序假设输入是由一个随机过程产生的,该过程将元素均匀、独立地分布在[0, 1]区间上。

在桶排序代码中,假设输入是一个包含n个元素的数组A,且每个元素0 <= A[i] < 1。此外,算法还需要一个临时数组B[0..n-1]来存放链表(即桶)。


2.算法正确性的证明

3.算法的分析

平均情况下它的时间代价为O(n)


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

推荐阅读更多精彩内容

  • 排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序; 输入:n个数:a1,a2,a3,…,an输出...
    BULL_DEBUG阅读 816评论 0 3
  • Ba la la la ~ 读者朋友们,你们好啊,又到了冷锋时间,话不多说,发车! 1.冒泡排序(Bub...
    王饱饱阅读 1,819评论 0 7
  • 一夜无眠,在这段婚姻里如此的苍白无力,徒然。没有谁能告诉我如何前进,一切的选择都不会好,该怎么走下去?
    何映児阅读 119评论 4 1
  • 进入大学的第214天,一直期待着有一场不一样的完美邂逅、、、、、、 因为邂逅真得很美好。 高中时代,我最好的哥们小...
    放飞心晴阅读 431评论 0 1
  • 前言:这是写给在校CS专业大学生的简介,传统编程已经日趋饱合,移动编程则方兴未艾,个人职业规划实施蓝海战术,未来成...
    chzhuang阅读 707评论 0 1