归并排序是建立在归并操作上的一种有效的排序算法。该算法是採用分治法(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
开始看编程珠玑了,第一个就是进行磁盘排序的问题,想到了也只是归并排序,但题目要求1M内存,这个算法不可行。编程珠玑写到使用位图(分两次操作读写可以成功实现,小于内存1M),详情看编程珠玑第一章。题目:给定10^7数据,对大数据进行排序。要求内存只有1M,时间可以接受,较短。解决方法:1.多路归并.....
分类:
其他好文 时间:
2014-07-23 22:09:47
阅读次数:
264
归并排序是将两个或两个以上有序子序列归并成一个有序数列的排序的排序算法,其时间复杂度O(n*log n)仅次于快速排序。在内排序中,通常采用的是2-路归并,即每两个子序列为一组进行排序。归并排序的原理是:设初始序列含有N个记录,则可以看成N个有序的子列,每个子序列的长度为1,然后两两归并,得到N/2个长度为2或1的子序列,再两两归并,如此重复的归并下去,直到到达一个有序的序列为止。
设初始数组为...
分类:
其他好文 时间:
2014-07-23 13:22:56
阅读次数:
231
1. 归并排序(MERGE SORT)、快速排序(QUICK SORT)和堆积排序(HEAP SORT)哪个排序算法效率最高?这要看情况。这也就是我把3种算法放在一起讲的原因,可能你更常用其中一种,不过它们各有千秋。归并排序算法,是目前为止最重要的算法之一,是分治法的一个典型应用,由数学家John ...
分类:
其他好文 时间:
2014-07-22 22:46:15
阅读次数:
180
4、归并排序
4.1算法思想——
将数组分为两半,对每部分递归地应用归并排序,直到最后的子数组只包含一个元素。在每部分都排好序后,对它们进行合并。
4.2
时间复杂度——
假如用T(n)表示使用归并排序对n个元素构成的数组进行排序而使用的时间,用mergeTime来表示将两个子分组合并起来而花费的时间。那么
T(n)
= T(n/2)+T(n/2) + mergetime
而me...
分类:
其他好文 时间:
2014-07-22 22:38:33
阅读次数:
189
一、题目给定一组数5,2,4,6,1,3,2,6;运用归并排序法对这组数进行排序。二、题目源程序#include#includeint L[100],R[100];void merge(int numbers[],int left, int mid, int right) { ...
分类:
其他好文 时间:
2014-07-22 00:16:35
阅读次数:
218
merge sort
----------------------------------------------------------------------
描述:归并排序
思路:
1.将区间对半分割
2.对左、右段分别排序
3.利用inplace_merge将左、右段合并成为一个完整的有序序列
复杂度:O(log n)
源码:
template
void mergesort(BidirectionalIter first, Bidirecti...
分类:
其他好文 时间:
2014-07-20 23:05:52
阅读次数:
245
归并排序是另一种运用分治法排序算法。与快速排序一样,它依赖于元素之间的比较来排序。但是,归并排序需要额外的存储空间来完成排序过程。
同样可以用分治法的思想将排序分为三个步骤。
分:将数据集等分为两半。治:分别在两个部分用递归的方式继续使用归并排序法。合:将分开的两个部分合并成一个有序的数据集。
归并排序与其他排序最大的同步在于,它的归并过程。这个过程就是将两个有序的数据集合并成一个有序的...
分类:
其他好文 时间:
2014-07-20 22:35:13
阅读次数:
283
题意:废话了一大堆就是要你去求一个序列冒泡排序所需的交换的次数。
思路:实际上是要你去求一个序列的逆序队数
看案例:
9 1 0 5 4
9后面比它小的的数有4个
1后面有1个
0后面没有
5后面1个
4后面没有
所以结果为4+1+0+1+0=6
所以逆序对的定义如果不清楚可以自己总结了
这道题说白了就是要你用归并排序求逆序对数。
下面是搜到某牛给的逆序对数的方法:...
分类:
其他好文 时间:
2014-07-20 09:38:35
阅读次数:
234