排序------------------分治策略与组合法

原创 2012年03月21日 15:09:56
 

1.分治法
插入排序使用增量法:在排好的A[1],A[2],...,A[j - 1]子数组后(A[1]为第一个元素),将A[j]插入,形成排好的子数组A[1],A[2],...,A[j]。
分治法是解决递归问题的一种策略:将原问题分成n个规模较小而结构与原问题相似的子问题,递归地解决这些子问题,然后再合并这些结果,得到原问题的解。
分治法在每层递归上都分为三步:
分解:将原问题分为一系列子问题
解决:递归地解决各子问题,如果子问题足够小,则直接解决
合并:将子问题的结果合并成原问题的解

2.合并排序
A是一个无序数组,p, q, r是其三个下标,且r > q > p;将元素p到q - p + 1与q到r合并排序的方法为:
MERGE(A, p, q ,r)
int n1 = q - p + 1;
int n2 = r - q;
int L[n1],R[n2];
for(i = 1; i <= n1; i++)
{
 L[i] = A[p + i - 1];
}
for(i = 1; i < n2; i++)
{
 R[i] = A[q + i];
}
int l = 1, r = 1;
for(i = 1; i <= n1 + n2 && l <= n1 && r <= n2; i++)
{
 if( L[l] < R[r] )
 {
  A[p + i -1] = L[l];
  l++;
 }
 if( L[l] > R[r] )
 {
  A[p + i - 1] = R[r];
  r++;
 }
}
while( l <= n1 )
{
 A[p + i -1] = L[l];
 l++; 
}
while( l <= n2 )
{
 A[p + i -1] = R[r];
 r++; 
}

3.分治法
思路:
将n个元素分成2组,每组有元素n/2(这里先假设n是偶数)
用合并排序分别对两个子序列递归地排序(也可以用其他方法解决子问题,如插入法,冒泡法)
合并两个已排好的序列,形成原序列的解
现在可以用MERGE(A, p, q ,r)方法来完成一个完整的排序方案
MERGER-SORT(A, p, r)
if(p < r)
{
 q = (r + p)/2;
 MERGER-SORT(A, p, q);
 MERGER-SORT(A, q + 1, r);
 MERGE(A, p, q ,r)
}
整个方法的运行时间是n*log2(n)。

可自由配置的图文混排控件——组合法

1、我们希望控件可以这样定制: com.itemp.imagetext.ImageText android:layout_width="wrap_content" android:l...

穷举组合法计算24点

  • 2011年04月18日 01:10
  • 6KB
  • 下载

62. Unique Paths(排列组合法&动态规划法)

A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). ...

欧拉计划第15题;图示法和组合法分别解决。第十六题:2的1000次方

十五题还是比较有意思的题目,不过高中就已经学习过了。只不过高中只会让你写一个过程,而这里让你用电脑把最后的结果算出来: 我们还是先来看一下题目: 从一个22网格的左上角开始,有6条(不允许...

分治策略实现快速排序法

说到算法,暑假就要去实习了,这时才感觉到数据结构和算法的重要性,虽然大二时候已经学过,但是基本用不到,导致现在基本忘了,现在重新拾起,重新把以前学过的和没有学过的算法都理一遍实现一遍!!! 给自己一个...

分治法-基于分之策略的归并排序和快速排序

分治法 分治法在算法结构上是递归的.为了解决一个给定的问题,算法一次或多次递归调用其本身以解决紧密相关的若干子问题. 思想: 将原问题分解为几个规模较小但类似有原问题的子问题,递归地求解这些子问...

浅谈分治策略之一:归并排序

分治策略是对大型问题的一种有效的方法,将一些大规模问题转换为一些小规模问题,分而治之,之前我们讲过了插入排序,插入排序是一种增量方法,当程序规模扩大时效率将下降,这时候我们可以采取分治的方法,本系列讲...

【从零学习经典算法系列】分治策略实例——快速排序(QuickSort)

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要O(nlogn)次比较。在最坏状况下则需要O(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(nlogn)算...

算法基础(3)分治策略之快速排序

快速排序是排序中的最佳实用选择,虽然在最坏情况下的时间复杂度为O(n^2), 但在随机输入的情况下,其时间复杂度为O(nlogn). 一、快速排序也是基于分治策略,其三个步骤为: 分解:将待排序数...

【分治策略】归并排序算法总结

归并排序思想归并排序的思想很简单,拿到一个无序的序列,先从序列的中间位置将其切分成两个子序列,然后对两个子序列递归地进行归并排序,最后,将排好序的子序列合并成一个完整的有序序列。归并排序算法的伪代码如...
  • hongchh
  • hongchh
  • 2016年08月17日 12:41
  • 954
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序------------------分治策略与组合法
举报原因:
原因补充:

(最多只允许输入30个字)