堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都...
分类:
其他好文 时间:
2014-07-25 14:08:42
阅读次数:
228
归并排序是建立在归并操作上的一种有效的排序算法。该算法是採用分治法(Divide and Conquer)的一个很典型的应用。首先考虑下怎样将将二个有序数列合并。这个很easy,仅仅要从比較二个数列的第一个数,谁小就先取谁,取了后就在相应数列中删除这个数。然后再进行比較,假设有数列为空,那直接将还有...
分类:
其他好文 时间:
2014-07-24 22:33:52
阅读次数:
144
归并排序还是比较好理解的。归并的含义是将两个或者两个以上的有序表组合成一个新的有序表。
具体方式是:假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到若干长度为2或者1的有序子序列,再两两归并。。。直至得到一个长度为n的有序序列为止,这就称之为2路归并排序。
复杂度:归并排序的最好最坏和平均时间复杂度都是O(n*logn),但是需要...
分类:
其他好文 时间:
2014-07-24 11:33:12
阅读次数:
223
这个是个基本的查找算法,因为只是把数读入就需要(N)的时间量,因此我们在说这类问题的时候都是假设读入过的。
在算法常用的时间,将问题缩小为一部分(大约1/2),那么我们就认为这个算法是O(logn)级别的。...
分类:
编程语言 时间:
2014-07-24 10:29:06
阅读次数:
239
开始看编程珠玑了,第一个就是进行磁盘排序的问题,想到了也只是归并排序,但题目要求1M内存,这个算法不可行。编程珠玑写到使用位图(分两次操作读写可以成功实现,小于内存1M),详情看编程珠玑第一章。题目:给定10^7数据,对大数据进行排序。要求内存只有1M,时间可以接受,较短。解决方法:1.多路归并.....
分类:
其他好文 时间:
2014-07-23 22:09:47
阅读次数:
264
River Hopscotch
Time Limit: 2000MS
Memory Limit: 65536K
Total Submissions: 6697
Accepted: 2893
Description
Every year the cows hold an event featuring a peculiar ve...
分类:
其他好文 时间:
2014-07-23 18:06:07
阅读次数:
270
Monthly Expense
Time Limit: 2000MS
Memory Limit: 65536K
Total Submissions: 14158
Accepted: 5697
Description
Farmer John is an astounding accounting wizard and has r...
分类:
其他好文 时间:
2014-07-23 16:38:21
阅读次数:
228
归并排序是将两个或两个以上有序子序列归并成一个有序数列的排序的排序算法,其时间复杂度O(n*log n)仅次于快速排序。在内排序中,通常采用的是2-路归并,即每两个子序列为一组进行排序。归并排序的原理是:设初始序列含有N个记录,则可以看成N个有序的子列,每个子序列的长度为1,然后两两归并,得到N/2个长度为2或1的子序列,再两两归并,如此重复的归并下去,直到到达一个有序的序列为止。
设初始数组为...
分类:
其他好文 时间:
2014-07-23 13:22:56
阅读次数:
231
转自网络集合数据结构一般都有这么一个方法:contains。其作用就是判断给定的元素是否存在集合中,这是一个常用的方法。其最简单的内部实现即遍历集合内的元素,一个个的判断是否与给定元素相等。为了更高效点我们甚至可以采用“更好的(好是相对的)”算法实现。比如如果该集合是已经排序的,那么我们用二分查找来...
分类:
其他好文 时间:
2014-07-23 12:54:06
阅读次数:
242
这是最大上升子序列的变形,可并没有LIS那么简单。需要用到二分查找来优化。看了别人的代码,给人一种虽不明但觉厉的赶脚直接复制粘贴了,嘿嘿原文链接:http://blog.csdn.net/ice_crazy/article/details/7536332假设存在一个序列d[1..9] = 2 1 5...
分类:
其他好文 时间:
2014-07-23 12:04:56
阅读次数:
276