面试必背必备
发布日期:2021-05-08 05:28:00 浏览次数:22 分类:精选文章

本文共 1534 字,大约阅读时间需要 5 分钟。

数据结构与算法

常见排序算法及最坏时间复杂度

《忆排序》中提到的选择、冒泡、插入等算法,作为数据处理的核心功臣,常出现在面试中。以下是几种算法的特点及性能指标:

  • 选择排序

    优点:时间复杂度稳定,平均时间复杂度为O(n²)。
    缺点:最坏情况下(已排序数组)时间复杂度为O(n²)。
    特点:通过多次对比操作完成排序。

  • 冒泡排序

    优点:简单实现,时间复杂度为O(n²)。
    缺点:同样面临最坏情况下的O(n²)时间复杂度。
    特点:通过相邻元素的交换完成排序。

  • 插入排序

    优点:时间复杂度表现更优,平均时间复杂度为O(n log n)。
    缺点:最坏情况下时间复杂度为O(n²)。
    特点:通过将元素逐一插入已排序数组完成排序。

  • 快速排序

    优点:平均时间复杂度为O(n log n),最优情况下(已排序数组)时间复杂度为O(n log n)。
    缺点:最坏情况下(所有元素逆序)时间复杂度为O(n²)。
    特点:通过递归地将数组划分为两部分,直到子数组长度为1为止。

  • 堆排序

    优点:时间复杂度稳定,平均时间复杂度为O(n log n)。
    缺点:没有最优情况,时间复杂度为O(n log n)。
    特点:通过构建堆结构完成排序。

  • 希尔排序

    优点:时间复杂度介于选择排序与插入排序之间,平均时间复杂度为O(n log n)。
    缺点:最坏情况下时间复杂度为O(n²)。
    特点:通过分组和比较的方式逐步优化数组。

  • 基数排序

    优点:时间复杂度为O(k n log n),其中k为基数。
    缺点:基数选择不当会导致时间复杂度增加。
    特点:通过基数的逐步排序完成整体排序。

  • 桶排序

    优点:时间复杂度为O(n + k),其中k为桶的数量。
    缺点:桶的数量选择不当会影响性能。
    特点:将数组元素按特定区间分配到桶中,通过桶内排序完成整体排序。

  • 计数排序

    优点:时间复杂度为O(k + n)。
    缺点:需要较大的基数值。
    特点:通过计数器记录元素频率,逐一读取元素完成排序。

  • 快归堆排序

    优点:平均时间复杂度为O(n log n),最优情况下时间复杂度为O(n log n)。
    缺点:最坏情况下时间复杂度为O(n²)。
    特点:结合快速排序和归并排序的优点,适用于大部分数据。

  • 希尔桶排序

    优点:时间复杂度为O(n log n)。
    缺点:最坏情况下时间复杂度为O(n²)。
    特点:采用希尔法则对数组进行分组,逐步优化数组。

  • 基数基数排序

    优点:时间复杂度为O(k n log n)。
    缺点:基数选择不当会影响性能。
    特点:通过多次基数排序完成整体排序。

  • 稳定性分析

    不同排序算法的稳定性直接影响到应用场景的选择。

    • 不稳定性:如选择排序、希尔排序、快归堆排序等。
    • 稳定性:如归并排序、计数排序、基数排序等。
  • TCP的三次握手

    在数据传输过程中,三次握手是建立可靠通信的基础。以下是详细解析:

    握手过程

  • 第一次握手

    • 客户端发送SYN包(seq=x),并进入SYN_SEND状态。
    • 服务器确认接收到SYN包后,发送SYN-ACK包(seq=y),并进入SYN_RECV状态。
  • 第二次握手

    • 服务器发送的SYN-ACK包确认客户端的SYN请求。
    • 客户端接收到SYN-ACK包后,发送ACK包(ack=y+1),并进入ESTABLISHED状态。
  • 第三次握手

    • 客户端发送ACK包完成握手过程。
    • 双方进入ESTABLISHED状态,完成三次握手。
  • 为什么需要三次握手

    三次握手的核心目标是确保通信双方的发射和接收能力正常。具体来说:

    • 第一次握手:仅确认对方发送能力正常。
    • 第二次握手:双方互相确认对方的发送与接收能力正常。
    • 第三次握手:确认对方的接收能力正常。

    通过三次握手,双方能够确保通信链路的可靠性,是数据传输的前提条件。

    上一篇:jvm-01
    下一篇:集合学习记录

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2025年03月21日 09时53分26秒