12、数据结构排序算法:归并排序、快速排序与树排序详解

数据结构排序算法:归并排序、快速排序与树排序详解

1. 归并排序(Merge Sort)

归并排序是一种高效的排序算法,在平均情况下,假设从两个子列表中比较键值时,每个子列表中的元素被移动到目标列表的可能性是相等的,这类似于抛硬币。从长远来看,从一个列表中选择的元素数量与从另一个列表中选择的元素数量大致相同,子列表会大致同时用完元素。这种情况与最坏情况的行为相似,所以平均而言,归并排序的比较次数与最坏情况下大致相同。

归并排序在所有情况下的时间复杂度都是 $O(n \lg n)$,这意味着它比我们目前看到的其他排序算法要快得多。然而,它的主要缺点是需要 $O(n)$ 的额外内存空间来完成排序工作。

归并排序需要额外空间的原因是,如果不使用额外空间来合并列表,操作会变得很麻烦且速度很慢。

2. 快速排序(Quicksort)

快速排序由 C.A.R. Hoare 在 1960 年发明,它仍然是通过键值比较来对随机数据进行排序的最快算法。

2.1 基本原理

快速排序是一种分治算法。它的工作方式是选择列表中的一个元素,称为枢轴元素(pivot element),然后重新排列列表,使得所有小于或等于枢轴的元素都在其左侧,所有大于或等于枢轴的元素都在其右侧,这个操作称为分区(partitioning)。一旦列表被分区,算法会递归地调用自身来对枢轴左右的子列表进行排序。当子列表的长度为 1 或 0 时,递归停止,因为这些子列表已经是有序的。

def quick(array, lb, ub)
  return if ub <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值