拜托,面试别再问我基数排序了!!!

简介:

排序,面试中考察基本功问的比较多,工作多年以后,对排序的细节记忆不那么清楚的小伙伴,面试时会比较吃亏。

有一种很神奇的排序,基数排序(Radix Sort),时间复杂度为O(n),今天花1分钟,通过几幅图,争取让大家搞懂细节。

画外音:居然还有时间复杂度为O(n)的排序算法?不但有,其实还有很多。

举个栗子:

假设待排序的数组arr={72, 11, 82, 32, 44, 13, 17, 95, 54, 28, 79, 56}

d82c1bdcebbc38c8a94a1c6087d29f0a2c184d8b

基数排序的两个关键要点

(1):被排序的元素的“个位”“十位”“百位”,暂且叫“基”,栗子中“基”的个数是2(个位和十位);

画外音:来自野史,大神可帮忙修正。

(2):“基”的每一位,都有一个取值范围,栗子中“基”的取值范围是0-9共10种,所以需要10个桶(bucket),来存放被排序的元素;

基数排序的算法步骤为:

FOR (每一个基) {

//循环内,以某一个“基”为依据

第一步:遍历数据集arr,将元素放入对应的桶bucket

第二步:遍历桶bucket,将元素放回数据集arr

}

更具体的,对应到上面的栗子,“基”有个位和十位,所以,FOR循环会执行两次。

【第一次:以“个位”为依据】

80aa65fabf8bc1eb9027467855ed6d655ae145b1

画外音:上图中标红的部分,个位为“基”。

第一步:遍历数据集arr,将元素放入对应的桶bucket;

bfa18521aa8f851077ddef7134ecae6951f0a8af

操作完成之后,各个桶会变成上面这个样子,即:个位数相同的元素,会在同一个桶里

第二步:遍历桶bucket,将元素放回数据集arr;

画外音:需要注意,先入桶的元素要先出桶。


操作完成之后,数据集会变成上面这个样子,即:整体按照个位数排序了

画外音:个位数小的在前面,个位数大的在后面。

 d29f52f75ccd95ad441500e3a615eb17a6c5f564

【第二次:以“十位”为依据】

b0688ddec069add6868d27e480058a8774d44f84

画外音:上图中标红的部分,十位为“基”。

第一步:依然遍历数据集arr,将元素放入对应的桶bucket;

faefd82eaef01e2d1918c5f9b8b9c8348164cba6

操作完成之后,各个桶会变成上面这个样子,即:十位数相同的元素,会在同一个桶里

第二步:依然遍历桶bucket,将元素放回数据集arr;

c81f559cd6cba4489224611f46289ac2813a8dad

操作完成之后,数据集会变成上面这个样子,即:整体按照十位数也排序了

画外音:十位数小的在前面,十位数大的在后面。

首次按照个位从小到大,第二次按照十位从小到大,即:排序结束

神奇不神奇!!!

几个小点:

(1)基的选取,可以先从个位开始,也可以先从十位开始,结果是一样的;

(2)基数排序,是一种稳定的排序

(3)时间复杂度,可以认为是线性的O(n);

希望这一分钟,大家有收获。


原文发布时间为:2018-10-10

本文作者:58沈剑

本文来自云栖社区合作伙伴“架构师之路”,了解相关信息可以关注“架构师之路”。

相关文章
|
3月前
|
SQL 关系型数据库 MySQL
几道常见面试问题总结(二)
几道常见面试问题总结(二)
|
3月前
|
算法 前端开发 JavaScript
面试必会的几道算法
面试必会的几道算法
|
8月前
两道智力题
两道智力题
|
11月前
|
算法 C++ Python
【每日算法Day 107】面试必考:良心推荐,一题三解,不看后悔一辈子
【每日算法Day 107】面试必考:良心推荐,一题三解,不看后悔一辈子
|
11月前
|
算法 C++ Python
【每日算法Day 82】面试经典题:求第K大数,我写了11种实现,不来看看吗?
【每日算法Day 82】面试经典题:求第K大数,我写了11种实现,不来看看吗?
|
算法 索引
【牛客算法-二分查找】刷题和面试兼顾还得看你啊
【牛客算法-二分查找】刷题和面试兼顾还得看你啊
94 0
【牛客算法-二分查找】刷题和面试兼顾还得看你啊
|
搜索推荐
面试官:给我手撕一下基数排序,再考虑一下如何进行改进呢?
到目前为止我已经把一些常见的排序算法进行了讲解。今天主要关注另外一个排序算法,叫做基数排序。 每天学一个知识点,一年之后就会有质的变化。
82 0
|
人工智能 搜索推荐 算法
程序员面试必备之排序算法汇总(下)
本文用Python实现了快速排序、插入排序、希尔排序、归并排序、堆排序、选择排序、冒泡排序共7种排序算法。上篇已经介绍了前三种~给出原文链接如下:程序员面试必备之排序算法汇总(上)
107 0
程序员面试必备之排序算法汇总(下)
|
搜索推荐 算法 小程序
程序员面试必备之排序算法汇总(上)
本文用Python实现了快速排序、插入排序、希尔排序、归并排序、堆排序、选择排序、冒泡排序共7种排序算法。
542 2
程序员面试必备之排序算法汇总(上)