基数排序

这篇具有很好参考价值的文章主要介绍了基数排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

基数排序是一种非常快且好写的排序。
以前一直以为基数排序就是桶排,现在发现自己很智慧,警钟长鸣。

思想

基数排序是一个以桶排为基础的排序。
桶排我就不多说了,简单且 \(O(n)\)
但是桶排有一个弊端,就是由于考试时空间限制是 \(10^8\) 左右,可需要排序的数据是 \(10^9\) 的,就不能用桶排了。
桶排中的空间其实有一大半都是浪费了的,那么换一种思路,我们可不可以将需要排序的 \(a_i\) 拆成一位一位的再做。
这里定义 \(x_i\)\(y_i\) 中,\(x_i\) 表示 \(a_i\) 的第 \(K\) 位的数,\(y_i\) 就表示第 \(K-1\) 位的数字。
然后分别对 \(x_i\)\(y_i\) 进行桶排,并对 \(x_i\) 的桶 \(c_i\) 做前缀和,这时 \(x_i\) 的排名就是 \(c_{x_i-1}+1 \sim c_{x_i}\)
再对 \(y_i\) 建立下标映射,设 \(p_{y_i}\)\(y_i\) 的下标。
这里 \(x_i\)\(y_i\) 因为下标相同,表示的就是 \(a_i\)
那么我们就可以用 \(x_{p_i}\) 来表示 \(y_i\) 所对应的 \(x_i\)
注意,这里我们从大到小\(i\) 进行遍历,\(y_i\) 就是从大到小的,其 \(a_{p_i}\) 就是 \(c_{x_{p_i}-1}+1 \sim c_{x_{p_i}}\) 范围中排名最大的。
\(c_{x_{p_i}}\) 就是 \(a_{p_i}\) 的排名。最后将 \(c_{x_{p_i}}\) 减一再进行下一次遍历。文章来源地址https://www.toymoban.com/news/detail-525861.html

到了这里,关于基数排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 不基于比较的排序:基数排序

    本篇只是讨论桶排序的具体实现,想了解更多算法内容可以在我的博客里搜,建议大家看看这篇排序算法总结:排序算法总结_鱼跃鹰飞的博客-CSDN博客  桶排序的原理: 代码:sort1是一个比较二逼的实现方式浪费空间,sort2是一个正式的方法 

    2024年02月13日
    浏览(28)
  • 排序算法——基数排序(C语言)

    什么是基数排序???基数排序是一种和快排、归并、希尔等等不一样的排序...它不需要比较和移动就可以完成整型的排序。它是时间复杂度是O(K*N),空间复杂度是O(K+M ) 基数排序是一种借助多的思想对单逻辑进行排序的方法。 基数排序根据每个位来分配

    2024年02月13日
    浏览(26)
  • 十大排序算法(下):计数排序,基数排序,桶排序

    有n个数,取值范围是 0~n,写出一个排序算法,要求时间复杂度和空间复杂度都是O(n)的 我们知道,前面介绍的基于比较的排序算法中,最好的算法,其平均时间复杂度都在O(N),达到线性的时间复杂度就要使用新的排序算法,而这种方法,就称为是计数排序。 计数排序的思路

    2024年02月05日
    浏览(25)
  • 深入浅出排序算法之基数排序

    目录 1. 前言 1.1 什么是基数排序⭐⭐⭐ 1.2 执行流程⭐⭐⭐⭐⭐ 2. 代码实现⭐⭐⭐ 3. 性能分析⭐⭐ 3.1 时间复杂度 3.2 空间复杂度 一个算法,只有理解算法的思路才是真正地认识该算法,不能单纯记住某个算法的实现代码! (1) 通过键值得各个位的值,将要排序的元素分配

    2024年02月08日
    浏览(43)
  • 基数排序(桶排序)——C语言实现

      本期我们讲解基数排序,基数排序讲完后,我们的常用排序算法专栏就已经讲完了,后续可能会出一些排序优化问题,以及排序算法结合C语言实战,比如 迷宫求解 、 🅿停车场系统 、 机房预约系统 以及 植物大战僵尸外挂 等等小项目。本人 从零开始学习云计算 的专栏

    2024年02月03日
    浏览(28)
  • 基数排序

    基数排序是一种非常快且好写的排序。 以前一直以为基数排序就是桶排,现在发现自己很智慧,警钟长鸣。 基数排序是一个以桶排为基础的排序。 桶排我就不多说了,简单且 (O(n)) 。 但是桶排有一个弊端,就是由于考试时空间限制是 (10^8) 左右,可需要排序的数据是 (

    2024年02月12日
    浏览(20)
  • 基数排序--C++实现

    对于待排序的base进制的一维数组。建立base(0~base - 1)个桶。 第digit轮, 根据 val % (base (digit))将数据放入桶中,放桶时插入排序, 直到所有数据都放在了0号桶。 k 次 bucketsort ,和将桶内数据放回原数组。 k = f l o o r ( l o g b a s e ( m a x V a l ) ) ‘ k = floor(log_{base}(maxVal))` k = f l oor ( l

    2024年02月07日
    浏览(25)
  • 归并交换基数简单选择排序

    基本思想就是:两两进行比较,如果发生逆序则进行交换,直到所有的记录都排好为止。 常见的交换排序方法: 冒泡排序 O ( n 2 ) O(n^2) O ( n 2 ) 快速排序 O ( n l o g 2 n ) O(nlog_2n) O ( n l o g 2 ​ n ) 冒泡排序就是基于简单的交换思想。每趟不断将记录两两比较,并按前小后大规则交

    2024年02月15日
    浏览(30)
  • 【数据结构与算法】基数排序

    基数排序 基数排序(Radix Sort)属于“分配式排序”,又称“桶子法”或 bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用。 基数排序法是属于稳定性的排序,基数排序法是效率高的稳定排序法。 基数排序是桶排序。 基

    2024年02月15日
    浏览(29)
  • 用C语言对学生成绩进行排序(归并排序与基数排序)

    我们内部排序已经学了插入排序(直接插入排序、折半插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(简单选择排序、堆排序),这些都属于内部排序,接下来我们学习内部排序里面剩下的归并排序和基数排序。 归并排序与上述基于交换、选择等排序

    2024年02月16日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包