2022更文挑战21-基数排序

98 阅读2分钟

「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」。

基数排序

前文

本文为学习过程中,对于基数排序相关知识的整理及总结。因包含个人思考部分,内容难免存在不准确之处,如果出现还请见谅。

基数排序

上一篇文章中已经讨论了桶排序相关的知识内容,这一篇我们来看一下基数排序的相关知识。所谓基数排序,可以认为是桶排序相关排序算法的一个变种。简单来说,就是根据待排序数字的每一位数字,进行不停的排序。排序后再将数据重新组合,生成新的待排序队列,再按照下一位数字进行排序,以此循环。

具体而言在排序的过程中,对于队列中待排序的若干数字,首先按照个位数字进行一轮排序。然后将数字分别放入0-9的数字桶内。然后将各个数据桶的数据进行重新的组合,生成新的待排序数字。下一步根据十位数字进行排序,再分别放入0-9的10个数据桶内。下一步重复组合数据的操作,再生成新的待排序数据队列。以此类推,从数字的个位向高位反复执行即可。当遇到位数不足的情况,需要在数字的高位进行补零操作。以0作为实际排序的数字即可,并放入0的数据桶内。按此方式直至所有的数据都被操作完毕,再将桶内的数据进行组合,即可得到最终的目标排序后队列。

举例来说,对于数据队列50, 3, 542, 745,第一轮排序后的结果为50,542,3,745。然后根据十位数字排列,得到3,542,745,50。然后根据百位数字排列,得到最终结果3,50,542,745,即为目标的从小到大的排列方式。

简单看一下伪代码:

    public void sort(int[] list){
        //初始化数据桶
        //对数据进行排序并重新放入数据桶中
        sortByNum();
        //得到最终排序结果
    }

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。