归并排序的核心:两个有序子列的归并 (图片来自 中国大学MOOC《数据结构》) 如上所示,假如我们已经有了这样两个有序的子序列,首先要做的就是把这两个子列合并。为此,可以开另外一个数组,然后把这几个数字按照一定次序放进去,保证最后那个数组是从小到
有许多算法在结构上是递归的:为了解决一个给定问题,算法要一次或多次地调用其自身来解决相关的子问题。这些算法通常采用分治策略:将原问题分成n个规模较小而结构与原问题相似的子问题。递归地解这些子问题,然后合并其结果就得到原问题的解。N=2时的分治法又称二分法。
用分治法求解一个问题,所需的时间是由子问题的个数,大小以及把这个问题分解为子问题所需的工作总量来确定的。一般来说,二分法(即把任意大小的问题尽可能的等分为两个子问题)较为有效。
分治法在每一层递归上都有三个步骤:
分解:将原问题分解成一系列子问题;
解决:递归的解各子问题。若子问题足够小,则直接解
合并:将子问题的结果合并成原问题的解;import java.util.Arrays;public class MergeSort {private final static int MAX_VALUE = 1000;private final static int LENGTH = 100000; public static void main(String[] args) {int[] A = new int[LENGTH];//产生随机序列randomI
分治算法实例
快速排序
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面