归并排序(merge sort)源码

原创 2008年09月30日 21:06:00
 
  1. #include <iostream>
  2. using namespace std;
  3. void merge(int ia[], int p, int q, int r)
  4. {
  5.     int n1 = q - p + 1;     // n1 = [p, q]
  6.     int n2 = r - q;         // n2 = (q, r]
  7.     int ia1[n1];
  8.     int ia2[n2];
  9.     for(int i=0; i<n1; i++)
  10.     {
  11.         ia1[i] = ia[p+i];
  12.     }
  13.     ia1[n1] = 0x7FFFFFFF;   // sentinel
  14.     for(int i=0; i<n2; i++)
  15.     {
  16.         ia2[i] = ia[q+1+i];
  17.     }
  18.     ia2[n2] = 0x7FFFFFFF;   // sentinel
  19.     
  20.     int i, j, k;
  21.     i = j = 0;
  22.     k = p;
  23.     
  24.     while( k <= r )
  25.     {
  26.         if( ia1[i]<=ia2[j] )
  27.         {
  28.             ia[k] = ia1[i];
  29.             i++;
  30.         }
  31.         else
  32.         {
  33.             ia[k] = ia2[j];
  34.             j++;
  35.         }
  36.         k++;
  37.     }
  38. }
  39. void MergeSort(int ia[], int p, int q)
  40. {
  41.     if(q > p)
  42.     {
  43.         int r = (p+q)/2;
  44.         MergeSort(ia, p, r);
  45.         MergeSort(ia, r+1, q);
  46.         merge(ia, p, r, q);
  47.     }
  48. }
  49. int main()
  50. {
  51.     int ia[6] = {6,5,4,3,2,1};
  52.     MergeSort(ia, 0, 5);
  53.     for(int i=0; i<6; i++)
  54.     {
  55.         cout << ia[i] << endl;
  56.     }
  57. }

C++实现归并排序Mergesort(使用递归的方法)

归并排序的最坏运行时间为O(NlogN)O(N\log N)。它的思想是把两个有序的子序列,通过一次遍历,合并且有序的放在第三个序列中。显然合并两个已排序的表的时间是线性的,最多进行N−1N-1次比较...
  • cjbct
  • cjbct
  • 2017年01月10日 11:57
  • 2208

排序算法详解【归并排序-Merge_Sort】

归并排序详解
  • linsheng9731
  • linsheng9731
  • 2014年04月04日 13:42
  • 9045

算法学习—002—js实现归并排序—mergeSort

var count=0; var A=['x','x','x','x','x','x','x','x','x',2,4,5,7,1,2,3,6,'x']; document.write("数组A :"...
  • chenmoquan
  • chenmoquan
  • 2013年05月27日 20:55
  • 2570

C++ Merge sort(归并排序)

归并排序(merge sort)是一个时间复杂度为O(nlogn)的基于比较的排序算法(comparison based sorting algorithm)。 归并排序大多数实现(implement...
  • a130737
  • a130737
  • 2014年07月28日 13:19
  • 2880

合并排序连接(Merge Sort Join)-1

Merge Sort Join原理机制      Nest Loop Join嵌套循环是一种比较古老的连接匹配方式,特点是通过两层的循环结构,将符合条件的数据行整理出来。嵌套循环的最大缺陷之一,就是伴...
  • suyishuai
  • suyishuai
  • 2014年01月16日 09:03
  • 1061

cuda gpu CTAMergesort

注:下面所提到的代码实现,均在moderngpu2.0中被作者所重写。 gpu上-并行归并排序,modern gpu上CTAMergesort源码实现: template     typenam...
  • qq_16097611
  • qq_16097611
  • 2016年06月04日 14:25
  • 466

Java排序算法(三)--归并排序(MergeSort)递归与非递归的实现

归并排序的思想是: 1.将原数组首先进行两个元素为一组的排序,然后合并为四个一组,八个一组,直至合并整个数组; 2.合并两个子数组的时候,需要借助一个临时数组,用来存放当前的归并后...
  • y999666
  • y999666
  • 2016年03月21日 09:39
  • 3232

排序算法系列:归并排序(Merge sort)(C语言)

通俗理解:运用分而治之的思想,编写递归函数,将大数组排序转化为小数组排序,最后再将其合并。void merge_sort(int*p,int low,int high) { int mid = (l...
  • iluckyning
  • iluckyning
  • 2012年11月02日 15:47
  • 3825

排序算法之 归并排序 及其时间复杂度和空间复杂度

在排序算法中快速排序的效率是非常高的,但是还有种排序算法的效率可以与之媲美,那就是归并排序;归并排序和快速排序有那么点异曲同工之妙,快速排序:是先把数组粗略的排序成两个子数组,然后递归再粗略分两个子数...
  • YuZhiHui_No1
  • YuZhiHui_No1
  • 2015年03月12日 16:16
  • 18285

In-place Merge Sort (原地归并排序)

原文链接:http://blog.ibread.net/345/in-place-merge-sort/ 一般在提到Merge Sort时,大家都很自然地想到Divide-and...
  • zentropy
  • zentropy
  • 2011年10月11日 15:42
  • 1121
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:归并排序(merge sort)源码
举报原因:
原因补充:

(最多只允许输入30个字)