排序算法面试专用

排序

  • 稳定性:元素在排序后是否保持原来的相对顺序。

1.冒泡排序:

  • n - 1次循环,每次循环比较前1-n-i个相邻的元素,把大的放后面

  • 平均复杂度: O ( n 2 ) O(n^2) O(n2)

  • 最好的情况

    • O ( n ) O(n) O(n)
    • 顺序
  • 最坏的情况:

    • O ( n 2 ) O(n^2) O(n2)
    • 逆序
  • 稳定

2.选择排序

  • 循环n-1次把当前没有排好的序列中找到最小的那个元素放到前面
  • 时间复杂度:
    • 最好,最坏,平均: O ( n 2 ) O(n^2) O(n2)
  • 不稳定

3.插入排序

  • 打扑克牌:每次拿到一个元素,插到合适的位置

  • 时间复杂度:

    • 最好: O ( n ) O(n) O(n),逆序
    • 最坏: O ( n 2 ) O(n^2) O(n2),顺序
  • 稳定

4.堆排序

  • 建立二叉查找树
  • 时间复杂度:
    • 最好最坏都是 O ( n l o g n ) O(nlogn) O(nlogn)
  • 不稳定

5.归并排序

  • 思路:

    • 取当前数组中间那个数,然后排好left、right,递归排下去

    • 排好 left 和right 后双指针,归并

  • 时间复杂度:最好最坏都是 O ( n l o g n ) O(nlogn) O(nlogn)

  • 稳定

6.快速排序

  • 思想:
    • 基于分治:确定分界点 q [ l ] , q [ r ] , q [ l + r > > 1 ] q[l], q[r], q[l + r >> 1] q[l],q[r],q[l+r>>1],这里面其中一个,把比分界点小的放到左边,比分界点大的放到右边,递归处理
  • 时间复杂度:
    • 最好和平均都是 O ( n l o g n ) O(nlogn) O(nlogn)
    • 最坏: O ( n 2 ) O(n^2) O(n2): 正序或逆序排列,递归n-1次
  • 稳定性:不稳定

7.计数排序

  • 思想:
    • 统计每一个数字出现的次数,然后按顺序输出
  • 时间复杂度:最好最坏平均都是 O ( n + m ) O(n+m) O(n+m)
  • 稳定

8.桶排序

  • 把数组里面的数按照大小均匀分布放在桶里面,然后桶里面自己排序,然后按顺序输出桶

  • 时间复杂度

    • 最好和平均都是 O ( n + k ) O(n + k) O(n+k)
    • 最坏的情况是元素大小很接近,一个桶里面会有很多元素:O(n^2)
  • 稳定

9.希尔排序

  • 按照间隔排序,间隔为n/2,每次排完后间隔除以2,最后间隔为1,就插入排序
  • 平均:O(nlogn),最好最坏带两个log
  • 不稳定

10.基数排序

  • 将整数按位分类,先按照个位,放到桶里面,每次按照顺序从桶里面取出来,再十位、百位、
  • 时间复杂度:最好最坏平均 O ( n ∗ k ) O(n*k) O(nk)
  • 稳定

相关推荐

  1. 排序算法面试专用

    2024-05-16 06:46:15       14 阅读
  2. 面试算法:归并排序

    2024-05-16 06:46:15       41 阅读
  3. 算法专题】分治 - 快速排序

    2024-05-16 06:46:15       27 阅读
  4. 面试算法:(一:排序算法

    2024-05-16 06:46:15       41 阅读
  5. 面试算法75:数组相对排序

    2024-05-16 06:46:15       35 阅读
  6. 面试算法-79-搜索旋转排序数组

    2024-05-16 06:46:15       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-16 06:46:15       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-16 06:46:15       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-16 06:46:15       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-16 06:46:15       20 阅读

热门阅读

  1. 视觉识别应用的场景有哪些

    2024-05-16 06:46:15       14 阅读
  2. LeetCode 257. 二叉树的所有路径

    2024-05-16 06:46:15       16 阅读
  3. C#知识|上位机面向对象编程时如何确定类?

    2024-05-16 06:46:15       15 阅读