手机号码之基数排序
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. 很容易得知,基数排序是线性时间复杂度的排序。
我们注意到,在上述例子中,每个数据的位数都是相同的,其实,这并不是基数排序的硬性要求。当数据数位不相等时,完全可以在前面补零,凑成数位相等的数据。
基数排序算法的思路很巧妙,代码实现很简单,故不赘述。思路,才是更重要的。
以上是关于手机号码之基数排序的主要内容,如果未能解决你的问题,请参考以下文章