[面试算法题模板]排序算法总结

本文详细介绍了常见的排序算法,包括冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序和堆排序。讨论了各算法的时间复杂度、空间复杂度和稳定性,并提供了实现模板,旨在帮助读者在面试中更好地理解和应用这些排序算法。
摘要由CSDN通过智能技术生成

一、引子

在面试的时候,很常见的是给你出一两道简单的算法题,让你去实现。或是直接说

“同学你对XX排序了解多少?”

当你叭叭叭回答完了之后,考官面带笑容,推过来一张纸

那你能实现一下吗?

所以今天打算把常考的排序算法总结一下,并且提供一两个模板,以供之后复习使用。

二、基本性质

排序算法 最好时间复杂度 平均时间复杂度 最坏时间复杂度 空间复杂度 稳定性
冒泡排序 O ( N ) O(N) O(N) O ( N 2 ) O(N^2) O(N2) O ( N 2 ) O(N^2) O(N2) O ( 1 ) O(1) O(1) 稳定
选择排序 O ( N 2 ) O(N^2) O(N2) O ( N 2 ) O(N^2) O(N2) O ( N 2 ) O(N^2) O(N2) O ( 1 ) O(1) O(1) 不稳定
插入排序 O ( N ) O(N) O(N) O ( N 2 ) O(N^2) O(N2) O ( N 2 ) O(N^2) O(N2) O ( 1 ) O(1) O(1) 稳定
希尔排序 O ( N ) O(N) O(N) O ( N 1.3 ) O(N^{1.3}) O(N1.3) O ( N 2 ) O(N^2) O(N2) O ( 1 ) O(1) O(1) 不稳定
快速排序 O ( N l o g N ) O(NlogN) O(NlogN) O ( N l o g N ) O(NlogN) O(NlogN) O ( N 2 ) O(N^2) O(N2) O ( l o g N − N ) O(logN - N) O(logNN) 不稳定
归并排序 O ( N l o g N ) O(NlogN) O(NlogN) O ( N l o g N ) O(NlogN) O(NlogN) O ( N l o g N ) O(NlogN) O(NlogN) O ( n ) O(n) O(n) 稳定
堆排序 O ( N l o g N ) O(NlogN) O(NlogN) O ( N l o g N ) O(NlogN) O(NlogN) O ( N l o g N ) O(NlogN) O(NlogN) O ( 1 ) O(1) O(1) 不稳定
计数排序 O ( N + K ) O(N+K) O(N+K) O ( N + K ) O(N+K) O(N+K) O ( N + K ) O(N+K) O(N+K) O ( N + K ) O(N+K) O(N+K) 稳定
基数排序 O ( d ( n + r ) ) O(d(n+r)) O(d(n+r)) O ( d ( n + r ) ) O(d(n+r)) O(d(n+r)) O ( d ( n + r ) ) O(d(n+r)) O(d(n+r)) O ( r d + n ) O(rd+n) O(rd+n) 稳定

计数排序中:K表示数字范围
基数排序中:r代表关键字基数,d代表长度,n代表关键字个数

三、冒泡排序

3.1 冒泡排序你了解吗?

答:冒泡排序的原理是(以升序为例):比较相邻的两个元素,如果前一个数比后一个数大,将二者交换。

3.2 冒泡排序时间复杂度怎么算?

答:冒泡排序每轮交换结束后,可以最少使得一个数字达到有序,因此最多执行 n − 1 n-1 n1 轮后,一定可以排好序。最差时间复杂度 O ( N 2 ) O(N^2) O(N2)

添加 f l a g flag flag 判断后,执行第一轮时,发现已经全局有序,直接跳出循环。因此最好时间复杂度为 O ( N ) O(N) O(N)

平均时间复杂度为 O ( N 2 2 ) O(\frac{N^2}{2}) O(2N2) = O ( N 2 ) O(N^2) O(N2)

3.3 冒泡排序空间复杂度多少?

答:仅需要常数个临时变量,用于交换前后两数字时使用。因此空间复杂度为 O ( 1 ) O(1) O(1)

3.4 冒泡排序稳定吗?

答:是稳定的。

稳定与否指的是如果数组中有相同的元素,那么排序后有没有可能,在最终结果中,原始数组中不同索引的相同元素的顺序是不固定的。
这里比较拗口,但是我们可以这样理解,一个数组[1,2,5,5,4],有两个数字5,我们认为它们是不同的,不妨假设为[1,2, 5 1 5_1 51, 5 2 5_2 52,4]。用两个不同下标,区分这两个5。假设排序后有可能得到[1,2,4, 5 1 5_1 5

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值