快排及归并的比较.pdfVIP

  • 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)

1亿VIP精品文档

相关文档