8.6考研408内部排序算法比较与应用知识点深度解析

考研408「内部排序算法比较与应用」知识点深度解析

一、排序算法核心指标

1.1 时间复杂度

算法类型 最好情况 平均情况 最坏情况
直接插入排序 O(n)O(n)O(n) O(n2)O(n^2)O(n2) O(n2)O(n^2)O(n2)
冒泡排序 O(n)O(n)O(n) O(n2)O(n^2)O(n2) O(n2)O(n^2)O(n2)
简单选择排序 O(n2)O(n^2)O(n2) O(n2)O(n^2)O(n2) O(n2)O(n^2)O(n2)
快速排序 O(nlog⁡n)O(n\log n)O(nlogn) O(nlog⁡n)O(n\log n)O(nlogn) O(n2)O(n^2)O(n2)
堆排序 O(nlog⁡n)O(n\log n)O(nlogn) O(nlog⁡n)O(n\log n)O(nlogn) O(nlog⁡n)O(n\log n)O(nlogn)
归并排序 O(nlog⁡n)O(n\log n)O(nlogn) O(nlog⁡n)O(n\log n)O(nlogn) O(nlog⁡n)O(n\log n)O(nlogn)
基数排序 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))

公式说明

  • ddd为关键字位数,rrr为基数(如十进制r=10r=10r=10)。

1.2 空间复杂度

算法类型 空间复杂度
直接插入排序 O(1)O(1)O(1)
冒泡排序 O(1)O(1)O(1)
简单选择排序 O(1)O(1)O(1)
快速排序 O(log⁡n)O(\log n)O(logn)
堆排序 O(1)O(1)O(1)
归并排序 O(n)O(n)O(n)
基数排序 O(n+r)O(n + r)O(n+r)

公式说明

  • 快速排序递归栈空间深度为O(log⁡n)O(\log n)O(logn)

1.3 稳定性

算法类型 稳定性
直接插入排序 稳定
冒泡排序 稳定
简单选择排序 不稳定
快速排序 不稳定
堆排序 不稳定
归并排序 稳定
基数排序 稳定

二、内部排序算法详解

2.1 堆排序(Heap Sort)

2.1.1 定义与核心思想

堆排序是一种树形选择排序,利用堆结构高效选择极值。其核心步骤为:

  1. 建堆:将无序数组调整为大根堆(或小根堆)。
  2. 调整堆:反复交换堆顶元素与末尾元素,并重新调整堆。

时间复杂度

  • 建堆:O(n)O(n)O(n)
  • 调整堆:O(nlog⁡n)O(n\log n)O(nlogn)
  • 总体:O(nlog⁡n)O(n\log n)O(nlogn)

空间复杂度O(1)O(1)O(1)(原地排序)
稳定性:不稳定(相同元素可能交换位置)。

2.1.2 算法实现

C语言实现

void heapify(int arr[], 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹木有心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值