堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
其他好文 时间:
2014-07-16 19:26:44
阅读次数:
192
这题的考察点 应该有2个一个是对于LIS算法的优化 使用进行二分查找的O(nlogn)算法 而不是 O(n^2)另一个就是 对于题意的理解... 并不是可以很直观地联系到 最长上升子序列的...你可以自己画图 就很直观了.. touch me另外一个很坑的地方 就是 road || ...
分类:
其他好文 时间:
2014-07-16 17:55:22
阅读次数:
182
刚才写了k个,顺手写个2个的,在链表的归并排序中很有用,效率非常好 1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next;...
分类:
其他好文 时间:
2014-07-16 17:42:41
阅读次数:
275
算法思想:分治法,将一个序列分为两部分,分别排序,然后合并已排序序列。算法实现: 1 MERGE_SORT(A,p,r) 2 mid = (p+r)/2 3 MERGE_SORT(A,p,mid) 4 MERGE_SORT(A,mid,r) 5 MERGE(A,p,m...
分类:
其他好文 时间:
2014-07-16 00:56:42
阅读次数:
355
本博文向大家介绍了插入排序的三种实现:直接插入排序,二分查找插入排序,希尔排序。详细分析的其实现过程、时间复杂度和空间复杂度、稳定性以及优化改进策略。最后简单的做了下性能测试。
分类:
其他好文 时间:
2014-07-15 09:59:26
阅读次数:
261
(1)最长递增子序列问题有两种方法:(1)动态规划方法(2)类似二分查找的方法O(nlogn)动态规划方法: 以i结尾的序列的最长递增子序列和其[0, i - 1]“前缀”的最长递增子序列有关,设LIS[i]保存以i结尾的最长递增子序列的长度:若i = 0,则LIS[i] = 1; 若i > 0,....
分类:
其他好文 时间:
2014-07-14 22:05:35
阅读次数:
474
Sort a linked list inO(nlogn) time using constant space complexity.题解:实现一个链表的归并排序即可。主要分为三部分:1.找到中点并返回的函数findMiddle;2.归并函数merge;3.排序函数sortList。数组的findM...
分类:
其他好文 时间:
2014-07-14 20:00:56
阅读次数:
182
接上面的题目,假若待排序的数据有重复的呢?这里采用的是归并排序。1、算法分析: 1、稳定性:归并排序是一种稳定的排序。 2、存储结构要求:可用顺序存储结构。也易于在链表上实现。 3、时间复杂度: 对长度为n的文件,需进行lgn趟二路归并,每趟归并的时间为O(n),故其时间复杂度无论是在最好情况下还是...
分类:
其他好文 时间:
2014-07-13 20:35:20
阅读次数:
373
如果直接对矩阵元素进行二分查找的话,时间复杂度是O(m*n),其实很容易想到先通过查找找到对应可能存在于哪一行,然后再在那行中查找是否存在,采用最简单的直接查找这样时间复杂度仅有O(m+n),如果这两次查找再分别采用二分查找的话,时间复杂度更可以降低到O(logm+logn),下面是O(m+n)的代码:...
分类:
其他好文 时间:
2014-07-13 18:50:21
阅读次数:
228
二分检索
二分检索(Binary Search)也叫二分查找,是应用于有序表上的一种检索方法。二分检索的思想是:由于序列已经有序,故不需要顺序遍历,每次只需和序列中间位置的元素进行比较即可,以此确定下次查找的位置。显然每次都可以排除一半的元素,很高效。...
分类:
其他好文 时间:
2014-07-13 18:26:44
阅读次数:
278