欢迎光临
我们一直在努力

【408考研复习】数据结构核心笔记:字符串模式匹配与内部排序算法全解析


文章目录

    • 📝 一、 字符串模式匹配算法
      • 1. BF 算法(Brute-Force 暴力匹配)
      • 2. KMP 算法
    • 📝 二、 插入类排序(Insertion Sort)
      • 1. 直接插入排序
      • 2. 折半插入排序(Binary Insertion Sort)
      • 3. 希尔排序(Shell Sort)
    • 📝 三、 交换类排序(Exchange Sort)
      • 1. 冒泡排序(Bubble Sort)
      • 2. 快速排序(Quick Sort)
    • 📝 四、 选择类排序(Selection Sort)
      • 1. 简单选择排序(Simple Selection Sort)
      • 2. 堆排序(Heap Sort)
    • 📝 五、 归并排序与基数排序
      • 1. 二路归并排序(2-Way Merge Sort)
      • 2. 基数排序(Radix Sort)
    • 📊 📊 六、 总结:408内部排序全算法速查大表

📝 一、 字符串模式匹配算法

1. BF 算法(Brute-Force 暴力匹配)

  • ⚖️ 算法核心与方法总结(原笔记):

  • “就像插槽一样,要求从左往右一一完全对应,才匹配”

  • 做题切入点:在匹配过程中,若发生失配,主串指针需要回溯。核心技巧在于“看错最后一位”(注意失配位置与主串回溯的对应关系)。

  • ⏳ 性能指标补充:

  • 时间复杂度:最好情况

    O

    (

    n

    +

    m

    )

    O(n+m)

    O(n+m),最坏情况

    O

    (

    n

    ×

    m

    )

    O(n \\times m)

    O(n×m)(其中

    n

    n

    n 为主串长度,

    m

    m

    m 为模式串长度)。

  • 空间复杂度:

    O

    (

    1

    )

    O(1)

    O(1)

2. KMP 算法

  • ⚖️ 算法核心与方法总结(原笔记):

  • ① 前缀串:例如,串 abc 的前缀包括 a, ab。

  • ② 后缀串:例如,串 abc 的后缀包括 c, bc。

  • ③ next[] 数组的求解:寻找前缀串与后缀串的“无相同字符”(最长公共前后缀)。若前缀和后缀完全无相同字符,则对应的公共长度为 0,指针根据对应的 next 规则回溯(无相同字符则向特定初始值靠拢)。

  • ⏳ 性能指标补充:

  • 时间复杂度:

    O

    (

    n

    +

    m

    )

    O(n+m)

    O(n+m)(主串指针不回溯,仅模式串指针利用 next 数组滑动)。

  • 空间复杂度:

    O

    (

    m

    )

    O(m)

    O(m)(需要额外的 next 数组空间)。


📝 二、 插入类排序(Insertion Sort)

  • ⚖️ 算法核心与方法总结(原笔记):
  • 将整个序列划分为“有序区”与“无序区”。
  • 核心动作是“逐个插入”:依次将无序区的元素扫描并插入到有序区的合适位置。

1. 直接插入排序

  • ⏳ 性能指标(原笔记):

  • 时间复杂度:

  • 最好情况:

    O

    (

    n

    )

    O(n)

    O(n) (原本就已经是正序有序)

  • 最坏/平均情况:

    O

    (

    n

    2

    )

    O(n^2)

    O(n2)

  • 空间复杂度:

    O

    (

    1

    )

    O(1)

    O(1)

2. 折半插入排序(Binary Insertion Sort)

  • ⏳ 性能指标(原笔记):
  • 时间复杂度:最好情况

    O

    (

    n

    log

    2

    n

    )

    O(n \\log_2 n)

    O(nlog2n),最坏情况

    O

    (

    n

    2

    )

    O(n^2)

    O(n2)

  • 空间复杂度:

    O

    (

    1

    )

    O(1)

    O(1)

  • 💡 408 考点挖坑补充:折半插入排序仅减少了“比较”的次数(优化为

    O

    (

    n

    log

    2

    n

    )

    O(n \\log_2 n)

    O(nlog2n)),但“移动”元素的次数依然是

    O

    (

    n

    2

    )

    O(n^2)

    O(n2),因此总的最坏时间复杂度仍为

    O

    (

    n

    2

    )

    O(n^2)

    O(n2)

3. 希尔排序(Shell Sort)

  • ⏳ 性能指标(原笔记):
  • 时间复杂度:取决于步长序列的设定,一般约为

    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)


📝 三、 交换类排序(Exchange Sort)

1. 冒泡排序(Bubble Sort)

  • ⚖️ 算法核心与方法总结(原笔记):

  • “一比一交换”:相邻元素两两比较并进行交换。

  • “每一次把最大的放在序列尾”(或将最小的元素浮动到序列头)。

  • ⏳ 性能指标(原笔记):

  • 时间复杂度:

    O

    (

    n

    2

    )

    O(n^2)

    O(n2)

  • 空间复杂度:

    O

    (

    1

    )

    O(1)

    O(1)

2. 快速排序(Quick Sort)

  • ⚖️ 算法核心与方法总结(原笔记):

  • 基于“分治”思想。

  • “每一趟把枢轴元素放在最终位置”。

  • 双指针移动口诀(做题追踪核心):“high选一个低于/小于枢轴值的,low选一个高的 —— 直到 low = high”。

  • ⏳ 性能指标(原笔记):

  • 时间复杂度:

    O

    (

    n

    log

    2

    n

    )

    O(n \\log_2 n)

    O(nlog2n)

  • 空间复杂度(递归调用栈深度):

  • 最好情况:

    O

    (

    log

    2

    n

    )

    O(\\log_2 n)

    O(log2n)

  • 最坏情况:

    O

    (

    n

    )

    O(n)

    O(n) (当序列原本就有序或逆序,快排退化为冒泡)


📝 四、 选择类排序(Selection Sort)

  • ⚖️ 算法核心与方法总结(原笔记):
  • “每次选一个最(大/小)元素放到最前/后”。

1. 简单选择排序(Simple Selection Sort)

  • ⏳ 性能指标(原笔记):
  • 时间复杂度:

    O

    (

    n

    2

    )

    O(n^2)

    O(n2) (无论初始状态如何,元素之间的比较次数都是固定不可省的

    n

    (

    n

    1

    )

    2

    \\frac{n(n-1)}{2}

    2n(n1))。

  • 空间复杂度:

    O

    (

    1

    )

    O(1)

    O(1)

2. 堆排序(Heap Sort)

  • ⚖️ 结构分类(原笔记):分为“大根堆”与“小根堆”。
  • 做题切入点(原笔记红字):初始建堆时,从

    [

    n

    /

    2

    ]

    [\\lfloor n/2 \\rfloor]

    [⌊n/2⌋](即最后一个非叶子节点)“开始考虑”,自底向上逐步进行筛选和调整。

  • ⏳ 性能指标补充:
  • 时间复杂度:最好/最坏/平均情况均为

    O

    (

    n

    log

    2

    n

    )

    O(n \\log_2 n)

    O(nlog2n)

  • 空间复杂度:

    O

    (

    1

    )

    O(1)

    O(1)


📝 五、 归并排序与基数排序

1. 二路归并排序(2-Way Merge Sort)

  • ⏳ 性能指标(原笔记):
  • 时间复杂度:

    O

    (

    n

    log

    2

    n

    )

    O(n \\log_2 n)

    O(nlog2n)

  • 空间复杂度:

    O

    (

    n

    )

    O(n)

    O(n) (需要与原数组同等大小的辅助空间用于归并合并)。

2. 基数排序(Radix Sort)

  • ⚖️ 算法核心与方法总结(原笔记):

  • “低位开始分”:从个位、十位、百位等低位关键字依次开始。

  • 核心步骤为“分配和收集”。

  • ⏳ 性能指标(原笔记):

  • 时间复杂度:

    O

    (

    d

    (

    n

    +

    r

    )

    )

    O(d(n+r))

    O(d(n+r)) (其中

    d

    d

    d 为关键码的码数/位数,

    r

    r

    r 为基数/桶数,如十进制则

    r

    =

    10

    r=10

    r=10)。

  • 空间复杂度:

    O

    (

    r

    )

    O(r)

    O(r) (需要

    r

    r

    r 个队列做辅助空间)。


📊 📊 六、 总结:408内部排序全算法速查大表

为了方便博文读者整体复习和对比记忆,特将笔记中的性能指标提炼成下表:

排序大类排序算法名称最好时间复杂度最坏时间复杂度平均时间复杂度空间复杂度稳定性
插入类 直接插入排序

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

log

2

n

)

O(n \\log_2 n)

O(nlog2n)

O

(

n

2

)

O(n^2)

O(n2)

O

(

n

2

)

O(n^2)

O(n2)

O

(

1

)

O(1)

O(1)

稳定
希尔排序

O

(

n

1.3

)

O(n^{1.3})

O(n1.3)

O

(

n

2

)

O(n^2)

O(n2)

O

(

n

1.3

)

O(n^{1.3})

O(n1.3)

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

log

2

n

)

O(n \\log_2 n)

O(nlog2n)

O

(

n

2

)

O(n^2)

O(n2)

O

(

n

log

2

n

)

O(n \\log_2 n)

O(nlog2n)

O

(

log

2

n

)

O

(

n

)

O(\\log_2 n) \\sim O(n)

O(log2n)O(n)

不稳定
选择类 简单选择排序

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

log

2

n

)

O(n \\log_2 n)

O(nlog2n)

O

(

n

log

2

n

)

O(n \\log_2 n)

O(nlog2n)

O

(

n

log

2

n

)

O(n \\log_2 n)

O(nlog2n)

O

(

1

)

O(1)

O(1)

不稳定
归并类 二路归并排序

O

(

n

log

2

n

)

O(n \\log_2 n)

O(nlog2n)

O

(

n

log

2

n

)

O(n \\log_2 n)

O(nlog2n)

O

(

n

log

2

n

)

O(n \\log_2 n)

O(nlog2n)

O

(

n

)

O(n)

O(n)

稳定
基数类 基数排序

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

)

O(r)

O(r)

稳定
赞(0)
未经允许不得转载:171主机测评 » 【408考研复习】数据结构核心笔记:字符串模式匹配与内部排序算法全解析
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址