Algorithms
danielhf
这个作者很懒,什么都没留下…
展开
-
排序之归并排序
归并算法将两个有序的数组合并到一个数组中并使之有序,这两个数组并不一定相同大小,但需要一个额外的数组存放归并结果。算法比较两个数组相同位置的元素,将小的放入结果数组中,如此往复,如果其中一个先到达末尾,则将另外一个剩下部分放入结果数组中。 归并排序将数组不断划分, 第一次分成两半, 第二次分成四份, 如此直到得到只有一个元素的数组返回, 假定一个元素是有序的, 然后将两个数原创 2004-07-12 17:47:00 · 1258 阅读 · 2 评论 -
排序之快速排序
排序之快速排序 无疑快速排序是最流行的内排序算法, 它在多数情况是最快的, 但是它确实比较复杂, 特别你如果想要搞清楚每一步究竟发生了什么事情, 中间值是如何变化的时候, 特别对于我来讲, 递归虽然从概念上仿佛好理解, 实际搞清它如何工作却是非常头痛的事情. 快速排序的思想基于划分数组原创 2004-07-18 14:58:00 · 2332 阅读 · 3 评论 -
初步理解大O表示法
通常我们需要一种方法来对不同的算法来进行比较,一般来说,解决同样的问题有多种算法,那么在不同的客观条件下如何对不同的算法进行取舍呢?一,算法的目标: 1,容易理解,编码和调试 优秀的算法通常是简洁而清晰的,这样带来的直接好处就是易于编码和理解,同时这样算法也必定是健壮的,如果一个算法晦涩难懂,则很可能其中会隐藏较多的错误。 2,最小的代价 算法的代价的最小化是指其原创 2004-06-28 19:20:00 · 2848 阅读 · 4 评论 -
排序之表插入排序
所谓表插入排序,是利用一个有序链表,将无序数组的元素依次插入有序链表中,则元素自动按顺序排列,然后循环删除表头元素,并重新放入数组,即排好序。 在效率上,在有序链表中插入数据,平均比较次数为 N/2, 插入N个数据, 比较次数为 N^2/4,即 O(N^2). 但复制仅需两次,一次从数组到链表,一次从链表到数组,对N个元素为 2*N 次,即 O(N). 对于原创 2004-07-02 21:08:00 · 2461 阅读 · 1 评论 -
排序之插入排序
插入排序算法假设数组是部分有序的,它从未排序的数组部分的最左边开始, 将这个元素值存到一个临时变量中,然后用这个变量的值和该元素左边(即假设已经有序的部分)的每一个元素相比较,如果临时变量的值比该元素小,则该元素要右移,直到发现有一个元素比临时变量的值要小,则将该值复制到这个元素后面的位置上。 算法从索引为1的元素开始,它假设左边的这一个元素是有序的,则在第一趟中,它需原创 2004-07-02 22:24:00 · 822 阅读 · 0 评论 -
排序之希尔排序
希尔排序算法因科学家 Donald L. Shell 得名, 它是基于插入排序的, 但增加了一个特性,即增量排序,它在有间隔的元素中进行插入排序,然后减小间隔,直到为间隔1。 比如说先对下标为0,4.8的元素进行排序,然后对下标为 1,5,9的元素排序,接下来减小间隔, 如对 0,1 排序。 插入排序对基本有序的数组排序效率非常高,然而通常情况下, 如果有小的元素在最后,原创 2004-07-03 16:14:00 · 2145 阅读 · 4 评论 -
二叉查找树的删除算法
二叉查找树的实现中, 删除算法是最难的, 对于我来说, 尤其困惑了好长时间, 需要画图及一些想象力. 由于我的类中有一些成员对方法提供了支持, 所以先看看类的声明:public class BinaryTree { public TreeNode root; // 树根 private TreeNode parent; // 表示原创 2004-08-21 23:25:00 · 4312 阅读 · 0 评论