- 7
- 0
- 约 5页
- 2017-06-05 发布于湖北
- 举报
快排和归并的比较
快排和归并的比较
快快排排和和归归并并的的比比较较
首先都是分治法的应用:
• 1 分解(divide):将原问题分解成一系列子问题;
• ² 解决(conquer):递归地解各子问题。若子问题
足够小,则直接求解;
• 3 合并:将子问题的结果合并成原问题的解。
快速排序 自顶向下 先受罪后享福
• --
• 1 分解:数组A[p..r]被划分为两个(可能空)子数组
• 2 解决:通过递归调用快速排序,对子数组A[p..q-1]和
A[q+1..r]排序;
• 3 合并:因为两个子数组是就地排序的,将它们的合并
并不需要操作,整个A[p..r]已排序。
归并排序 自底向上 先享福后受罪
•
• 归并排序算法完全依照分治模式,直观的操作如下:
分解:将 个元素分成各含 个元素的子序列;
• 1 n n/2
• 2 解决:用归并排序法对两个子序列递归地排序;
• 3 合并:合并两个已排序的子序列以得到排序结果。
• 快速排序:
• 其求解动作在分解子问题开始前进行,而问题的分解基于
原问题本身包含的信息;然后,自顶向下地递归求解每个
自顶向下
自自顶顶向向下下
子问题。由于在快速排序过程中存在不是基于比较的位置
交换,因此,快速排序是不稳定的。
• 这种自顶向下分治策略的编程模式如下:
• 如果问题规模足够小,直接求解,否则
• 执行求解动作,将原问题分解为规模更小的子问题;
• 递归地求解每个子问题;
• 因为求解动作在分解之前进行,在对每个子问题求解
之后,不需要合并过程。
• 归并排序:
• 在分解时,只是单纯地将原问题分解为两个规模减半的子
问题;在分解过程中,没有任何对原问题所含信息的利
用,没有任何尝试对问题求解的动作;这种分解持续进
行,直到子问题规模降足够小(为 ),这时子问题直接
1
得解;然后,自底向上地合并子问题的解,这时才真正利
自底向上
自自底底向向上上
用原问题的特定信息,执行求解动作,对元素进行比较。
• 这种自底向上分治策略的编程模式如下:
• 如果问题规模足够小,直接求解,
• 否则单纯地分解原问题为规模更小的子问题,
• 并持续这种分解;
• 执行求解动作,将子问题的解合并为原问题的解。
原创力文档

文档评论(0)