- 博客(9)
- 资源 (1)
- 收藏
- 关注
原创 动态规划之钢条 切割
问题描述 假设有长度为n寸的钢管,我们可以切割这段钢管以获得最大的利益(假设切割钢管无花费),价格表pi已知,问如何切割才能是销售收益rn最大。 解决方案 对于这个问题我们可以使用递归的方式来解决。 public static int CUT_ROD(int[] p, int n){ if(n == 0){ return 0; }
2015-03-31 15:51:07 449
原创 简单链表的实现
链表的简介 链表是一种这样的数据结构,其中的各对象按线性顺序排列。数组的线性顺序是由数组下标决定的,然而与数组不同的是,链表的顺序是由各个对象里的指针决定的。链表的实现 结点类Nodepackage sxd.learn.algorithms;public class Node { public Node next; public int data; public No
2015-03-25 22:53:06 364
原创 计数排序
算法描述 前面所描述的插入排序,归并排序,快速排序等都是比较排序。比较排序指的是,在排序的最终结果中,各元素的次序依赖于它们之间的比较顺序。 计数排序假设n个输入元素中的每一个都是从0到k区间内的一个整数,其中k为某个整数。其基本思想是:对一个输入元素x,确定小于等于x的元素个数,利用这一信息可以直接把x放到它在输出数组中正确的位置上。例如,有17个元素小于x,则x就应该在第18个输
2015-03-22 11:13:27 350
原创 快速排序
算法描述 快速排序通常是实际排序中最好的选择。快速排序应用了分治法的思想。 从数组中选取一个数当作主元(通常为第一个数或者最后一个数)分区,小于主元的数放在的它的左边,大于主元的数放在它的右边对左右分区继续执行上述两个过程直到分区只剩一个元素算法实现 package sxd.learn.algorithms;public class QuickSort { public st
2015-03-20 19:36:20 354
原创 堆排序
算法排序 堆排序类似于归并排序,二叉堆是一个数组,它可以被看成一个近似的完全二叉树。树上的每一个节点对应数组中的一个元素。 在排序算法中我们使用的最大堆。 2.package sxd.learn.algorithms;/** * date Mar 19, 2015 * desc HeapSort 堆排序 */public class HeapSort
2015-03-19 19:34:41 350
原创 最大子数组问题
算法描述 求解数组中最大子数组的位置,和归并排序类似,也是使用分治法,最大字数组的位置要么出现在原数组的左半部分,要么出现在原数组的右半部分,要么一部分在左半部分,一部分在右半部分。算法实现package sxd.learn.algorithms;public class Find_Max_SubArray { public static void main(String[] args
2015-03-15 11:01:54 337
原创 归并排序
算法描述 将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后合并这些子问题的解来建立原问题的解——分治法。归并排序就是分治法的典型算法之一,归并排序的关键操作是合并两个已排序的序列。算法实现package sxd.learn.algorithms;public class MergeSort { public static void main(String
2015-03-09 20:42:58 372
原创 插入排序
插入排序1.算法描述 插入排序的过程好比排序扑克牌。开始时,左手为空。然后,我们开始摸牌放入左手中,每摸起一张牌时,我们需要把它插入到左手已有牌中的合适位置,这里我们从右向左将这张牌与左手上已有的牌一次比较,左手上的牌总是排序好的。最终,我们得到整个排序好的序列。2.算法实现package sxd.learn.algorithms;public class
2015-03-04 14:34:39 380
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人