归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个...
分类:
其他好文 时间:
2014-07-19 15:23:57
阅读次数:
241
算法导论在介绍算法时列举了插入排序与并归排序,以此来说明什么事算法,算法效率以及提出了算法设计中重要的思想--分治,也就是将问题划分为规模较小的子问题。这种思想在大规模运算时具有显著的时间开销优势,例如插入排序和并归排序,其时间开销大致分别等于C1N2和C2Nlog2N。下面介绍具体的代码:首先是插...
分类:
其他好文 时间:
2014-07-19 11:23:35
阅读次数:
220
题目原意是用归并排序,刚学树状数组,就用了下
树状数组的离散化
离散化,是数据范围太大是所借用的利器,举个例子,有四个数99999999 1 123 1583 数据范围太大,而树状数组中的c数组开的范围是数据的范围,这时候就需要离散化,把四个数一次标号为1 2 3 4(即第一个数,第二个数。。。),按键值排序之后 依次为2 3 4 1(即从小到大排序为第二个数,第三个数。。。),所以,第二个数...
分类:
其他好文 时间:
2014-07-18 12:33:14
阅读次数:
214
归并排序的基本思想是:将待排序文件看成n个长度为1的有序子文件,把这些子文件两两归并,得到 n/2 个长度为2的有序子文件,然后再把 n/2 个有序子文件两两归并,如此这样反复进行下去,直到最后得到一个长度为n的有序序列为止。归并排序的核心操作是将数组中,前后相邻的两个有序序列,归并为一个有序序列。...
分类:
其他好文 时间:
2014-07-18 09:34:37
阅读次数:
158
第一章:磁盘排序:对于一个提出的问题,不要未经思考就直接给出答案。要先深入研究问题,搞清楚这个问题的特点,依据这个特点,可能有更好的解决方式。比方:文中:最初的需求仅仅是“我怎样对磁盘文件排序”。我们首先想到了经典的归并排序。但,进一步了解到排序的内容是10000000个记录,每条记录都是一个7位整...
分类:
其他好文 时间:
2014-07-18 08:18:16
阅读次数:
241
刚才写了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...
分类:
其他好文 时间:
2014-07-16 17:32:03
阅读次数:
223
写在前面:
排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。因此排序掌握各种排序算法非常重要。对下面介绍的各个排序,我们假定所有排序的关键字都是整数、对传入函数的参数默认是已经检查好了的。只是简单的描述各个算法并给出了具体实现代码,并未做其他深究探讨。
基础知识:
...
分类:
其他好文 时间:
2014-07-16 09:47:22
阅读次数:
296
算法思想:分治法,将一个序列分为两部分,分别排序,然后合并已排序序列。算法实现: 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
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