算法导论笔记——归并排序C语言实现

第二章

算法基础

2.3.1 分治法
许多有用的算法在结构上是递归的,为了解决某个问题,算法依次或多次递归的
调用其自身已解决其紧密相关的若干子问题。这些算法典型遵循分治法的思想。

分治模式每层递归都有三个步骤:
分解 将原问题分解为若干子问题,这些子问题都是原问题较小的 实例实例:对
于给定输入序列成为问题的实例。
解决 递归的求解各子问题,如果子问题够小则可以直接求解。
合并 将子问题的解合并成原文题的解。

归并排序完全遵循分治模式。
分解 待排序的n个元素的序列成各具n/2个元素的两个子序列。
解决 递归的求解各个子问题,若子问题足够小,则直接求解
合并 合并两个已排序的子序列产生答案

原书伪代码(含哨兵 用于判断子序列元素是否用完)
排序部分
MERGE(A,p,q,r) //A待排数组,p起始项,q中间项,r末尾项
n1 = q - p + 1
n2 = r - q
//创建两个子序列L[1..n1+1],M[1..n2+1]
for i = 1 to n1
 L[i] = A[q+j]
for j = 1 to n2
 R[j] = A[q + j]
L[n1 + 1] = ∞      //哨兵
R[n2 + 1] = ∞
i = 1
j =
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值