初级答法
常见的排序算法有:冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等
P.S.
● 适合对以上排序算法一知半解,不太自信的同学,所谓言多必失,回答基本的就行
● 但要对接下来【各种排序的时间复杂度】的追问做到心中有数,这个必须背一背(参考后面的表格)
进阶答法
排序算法大致可分为两类:
● A. 基于比较的排序算法
● B. 非比较排序算法
比较排序算法有:快排、归并、堆排序、插入排序等
非比较排序算法有:计数排序、桶排序、基数排序等
比较排序算法中
● 快排、归并、堆排序能够达到 $$O(n \cdot \log{n})$$的(平均)时间复杂度
● 而插入排序的(平均)时间复杂度是 $$O(n^2$$
● 但并不是说复杂度高的算法就差,这要看数据规模和数据有序度,例如
○ 数据量小,或是有序度高的数据就适合用插入排序
○ 同样是数据量大的数据排序,如果数据的有序度高,归并优于快排
○ 快排虽然是比较排序中最快的算法,但若是分区选取不好,反而会让排序效率降低
○ 工业级的排序都是混合多种排序算法,例如 java 排序的实现就是混合了插入、归并与快排,不同的数据规模、不同场景下切换不同的排序算法
至于计数、桶、基数可以达到进一步让时间复杂度降至$$O(n$$,当然这与被排序数字的位数、范围等都有关系,您想知道的话,咱们可以细聊。
P.S.
● 适合对这些排序算法非常熟悉的同学,这时应注重回答的条理性
○ 首先,对算法进行简单分类,让答案更为清晰
○ 其次,不要等面试官来继续追问,而是主动回答各个算法的时间复杂度和适用场景,体现你对它们的熟悉
○ 第三,一定要对各个算法的细节有充分准备,否则问到答不出来就尴尬了,这时不如降级为【初级答法】