面试官超级喜欢问的排序算法

本文是一位自学一年JAVA的面试者在面试中遇到的排序算法问题。面试官询问了各种排序算法,包括稳定性、时间复杂度以及适用场景。面试者详细解释了冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序、基数排序和桶排序的特点、稳定性以及它们在不同数据规模和场景下的应用。面试中还特别探讨了基数排序和桶排序的细节,以及快速排序的过程。文章强调了熟练掌握排序算法在面试和实际工作中的重要性。
摘要由CSDN通过智能技术生成

前言

自学了一年JAVA阿巴阿巴终于约到了面试,然而这次面试官让她谈谈对排序算法的理解。

面试官: 你对算法这一块了解吗?排序这一块了解吗?

阿巴阿巴: 了解一点,排序算法这一块主要有冒泡排序、插入排序、希尔排序、选择排序、快速排序、归并排序、堆排序、基数排序、桶排序。

面试官: 很不错,那你知道什么是稳定性吗,这些算法都是稳定的吗?他们的复杂度分别是多少呀?

阿巴阿巴: 稳定性就是说,如果有2个元素a和b,且 a = b,且a排在b前面,如果经过排序算进行排序后,b在a前面了,那么我们就说这个算法是不稳定的,这就是稳定性。不稳定的算法有快速排序、选择排序、希尔排序、堆排序。俗称‘快选希堆’。

阿巴阿巴: 如下图(狗头),可以看到平均性能为O(nlogn)的有:快速排序,归并排序,堆排序,这些排序算法时间复杂度低,适合大数据集排序,当然时间复杂度高的排序算法也有自己的用武之地的。

面试官: 讲一下你知道的算法的使用场景呗

阿巴阿巴:

冒泡排序适合: 适用于数据量不大,且要求排序稳定,数据量本身基本有序的情况。

选择排序适合: 当数据量不大且对于稳定性没有要求的情况(相对冒泡排序来说减少了交换次数)。

插入排序适合: 适合于数据量不大,对算法稳定性有要求,局部有序或整体相对有序的情况。

归并排序适合: 数据比较大,且对算法稳定性有要求的情况。

快速排序适合: 数据量大,且数据较为分散,且对稳定性没啥要求的情况。

堆排序适合: 数据量大,对稳定性没要求的情况。

希尔排序: 希尔排序是对直接插入排序的一种优化,可以用于大型的数组,希尔排序比插入排序和选择排序要快的多,并且数组越大,优势越大。

基数排序适合: 适合数据集中,没有特别大的数据,对算法要求稳定的场景。

桶排序适合: 适合数据比较集中的,对算法要求稳定的场景。

面试官: 好的,看你是有备而来,那我问个冷门点的,可以给我详细介绍下基数排序和桶排序吗?

阿巴阿巴: 基数排序属于“分配式排序”,又称“桶子法”或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。比如说有一批数据[31,19,46,23,17],那么先按照“个”位上的数值进行排序,放进下面的桶中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值