手机号码之基数排序

Posted 涛歌依旧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手机号码之基数排序相关的知识,希望对你有一定的参考价值。

    七大常见排序是:冒泡排序、选择排序、插入排序、归并排序、希尔排序、快速排序和堆排序,它们都是基于比较的排序,时间复杂度最好能达到O(NlogN).  

     三大特殊排序是:计数排序、桶排序和基数排序,它们是非比较的排序,时间复杂度为线性。

     在一些笔试面试题目中,排序算法几乎是必然会涉及到的,尤其是对于校招而言。


      先来看这样一个问题:

     有n个手机号码,试排序,要求时间复杂度尽可能低


     为了简化叙述,我们对321, 145, 241, 116, 742, 532进行排序,基数排序的过程如下:

       a.  对个位进行计数排序

       b.  对十位进行计数排序

       c.  对百位进行计数排序


     如上三个计数排序的步骤合起来,形成了基数排序。此时,基数排序的“基”,其实就是指0-9这10个数组成的基。基数排序的图示如下:

      

     从基数排序的过程可以得知,其时间复杂度为O(d*n), 其中n为待排序的数的个数,d是每个元素的数位个数,在上图中,d=3, n=6.  很容易得知,基数排序是线性时间复杂度的排序。


     我们注意到,在上述例子中,每个数据的位数都是相同的,其实,这并不是基数排序的硬性要求。当数据数位不相等时,完全可以在前面补零,凑成数位相等的数据。

     基数排序算法的思路很巧妙,代码实现很简单,故不赘述。思路,才是更重要的。


以上是关于手机号码之基数排序的主要内容,如果未能解决你的问题,请参考以下文章

20191209-八大排序之基数排序

数据结构Java版之基数排序

#yyds干货盘点#十大经典排序之:基数排序 |计数排序

排序算法之基数排序

排序算法之基数排序

基于桶的排序之基数排序以及排序方法总结