美文网首页
《数据结构》——基数排序,桶排序和计数排序

《数据结构》——基数排序,桶排序和计数排序

作者: shijiatongxue | 来源:发表于2019-03-13 10:14 被阅读0次

1 基数排序

给定一个序列,对其进行基数排序。基数指的是,数字的个位、十位等等。每一轮的遍历,只关注基数位置的数。
基本思想:不进行关键字的比较,而是依靠“分配”和“收集”。

算法描述:


准备:数字0-9“篮子”。

  • 开始:
    • 遍历基数(从个位开始):
      • 根据基数位置数的大小,把其放到相应的篮子;
      • 按照0-9的顺序对篮子里的数进行收集;
  • 结束

复杂度分析:

时间复杂度 O(NM)
空间复杂度 O(N)

分析:时间复杂度:O(NM),M是基数的个数。空间负责度:O(N),每个数篮子,链式存储。

2 桶排序

给定一个序列,对其进行桶排序。

算法描述:


准备:划分一定数量的桶。

  • 开始:
    • 遍历序列,把数放到相应的桶中;
    • 对非空的同进行排序(任意排序算法)。
    • 按照顺序读取桶中的元素。
  • 结束

复杂度分析

时间复杂度 O(\frac{NM}{2}+M*\frac{N}{M}log_2\frac{N}{M}+M)
空间复杂度 O(N)

分析:N为排序长度,M为桶的个数。

  • 入桶阶段,需要对每个元素划分的桶进行选择,每个元素需要比较\frac{M}{2}次;
  • 排序阶段,每个桶都要进行一次排序,假设桶内元素个数均匀分布。
  • 出桶阶段,每一个桶都要遍历一次。

3 计数排序

对一个给定数值上下限的序列N,对其进行计数排序。

算法描述:


准备:初始化一个全为0计数数组C。

  • 遍历序列N,对于每一个遍历到的数,数组C的相应位置的值+1;
  • 遍历数组C:
    • 读取数组值,如果该值大于0,循环:
      • 打印出该位置的编号,值-1;
  • 结束算法。

复杂度分析

时间复杂度 O(2N+M)
空间复杂度 O(M)

分析:时间复杂度:遍历排序数组N,遍历计数数组(长度设为M),并循环N。空间复杂度:计数数组M。
可以看出,这个算法的时间复杂度是很低的,可能超过O(nlog_2n)的极限。
计数排序Leetcode编程练习

相关文章

  • (转)排序算法

    排序算法点这里 数据结构与算法——计数排序、桶排序、基数排序

  • php-计数排序、基数排序、桶排序

    计数排序、基数排序、桶排序 时间复杂度 O(n) 计数排序 基数排序 桶排序

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • 数据结构与算法——计数排序、桶排序、基数排序

    数据结构与算法——计数排序、桶排序、基数排序 计数排序 计数排序有如下四个步骤。 首先会对每个输入进行频率统计,得...

  • iOS 计数排序、基数排序、桶排序

      计数排序(Counting Sort)、基数排序(Radix Sort)、桶排序(Bucket Sort)适合...

  • Java | 10种排序算法

    冒泡排序 选择排序 插入排序 希尔排序 计数排序 基数排序 堆排序 归并排序 快速排序 桶排序

  • 常见的排序

    冒泡排序: 选择排序: 插入排序: 快速排序: 希尔排序: 归并排序: 堆排序: 计数排序: 桶排序: 基数排序:

  • 002--20200409刷题

    冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序

  • JavaScript:十大排序的算法思路和代码实现

    本文内容包括:(双向)冒泡排序、选择排序、插入排序、快速排序(填坑和交换)、归并排序、桶排序、基数排序、计数排序(...

  • 八种基本排序算法的使用

    最经典最常用的排序算法有:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序和桶排序。这些排序算...

网友评论

      本文标题:《数据结构》——基数排序,桶排序和计数排序

      本文链接:https://www.haomeiwen.com/subject/fzwapqtx.html