算法
biakia0610
这个作者很懒,什么都没留下…
展开
-
归并排序
/** * 归并排序,本质是分治算法,对每个数组分为左右两个数组,然后在合并的时候进行排序 * @author biakia * */public class MergeSort { private static int[] mergeSort(int[] array,int left,int right){ int[] result=new int[right-left+1]原创 2014-09-01 20:58:40 · 266 阅读 · 0 评论 -
快速排序
/** * 经典的快速排序,基本思想分为三步: * 1、分解:选取一个基元素,把数组中小于基元素的元素放到左边,大于基元素的放到右边 * 2、递归求解 * 3、合并:其实一旦求解完,数组就已经排好序了,所以不需要合并 * @author biakia * */public class QuickSort { private static void quickSort(int[原创 2014-09-01 21:09:51 · 250 阅读 · 0 评论 -
最长公共子序列
/** * 最长公共子序列问题,是一个经典的动态规划问题,它有如下最优子结构: * 令c[i][j]保存的是最大长度,则 * 1、当i=0 j=0时 c[i][j]=0 * 2、当i,j>0;x[i]=y[j]时 c[i][j]=c[i-1][j-1]+1 * 3、当i,j>0;x[i]!=u[j]时 c[i][j]=max{c[i][j-1],c[i原创 2014-09-02 14:46:44 · 347 阅读 · 0 评论 -
最大字段和
/** * 求一个序列的最大字段和: * 比如序列{-2,11,-4,13} 则最大字段和为18 * @author biakia * */public class MaxSubSum { /* * 求最大字段和的分治算法: * 如果将所给的序列a[1:n]分为两段:a[1:n/2],a[n/2+1,b],那么要求最大字段和,共三种情况: * 1、a[1:n]的最大字段和原创 2014-09-02 15:10:36 · 468 阅读 · 0 评论