1. #include <iostream>
  2. using namespace std;
  3. //归并排序非递归版。
  4. void Sort(int a[], int n,int high)
  5. {
  6. int k;
  7. for (int i = 0; i < high; i += 2 * n)
  8. {
  9. int x = i;//001
  10. int y = i + n;//2 2 3
  11. int z = i + 2 * n;// 4
  12. if (z>high)
  13. {
  14. z = high;
  15. }
  16. for (int j = y; j <= z; j++)
  17. {
  18. int temp = a[j];
  19. for (k = j; k > 0; k--)
  20. {
  21. if (a[k - 1]>temp)
  22. {
  23. a[k] = a[k - 1];
  24. }
  25. else
  26. {
  27. break;
  28. }
  29. }
  30. a[k] = temp;
  31. //在须要合并的时候,我选择使用插入排序,不开辟新的空间。
  32. }
  33. }
  34. }
  35. void Grial(int a[],int high)
  36. {
  37. int n = high / 2+1;//终止位置。
  38. //1 2 3
  39. for (int i = 1; i <= n; i *= 2)
  40. {
  41. Sort(a,i,high);
  42. }
  43. }
  44. int main()
  45. {
  46. int a[] = { 5,4,3,7,1,3,2,0,5,6,7,9,654,5,423,3,4,
  47. 5,6,8,523,423,4,5,6,7,8,45,6,53,423,4,100 };
  48. Grial(a,sizeof(a) / sizeof(int)-1);
  49. for (int i = 0; i < sizeof(a) / sizeof(int);i++)
  50. {
  51. cout << a[i] << " ";
  52. }
  53. cout << endl;
  54. return 0;
  55. }
  1. #include <iostream>
  2. using namespace std;
  3. //递归版本号的归并排序。
  4. void Sort(int a[], int low, int mid, int high)
  5. {
  6. int i;
  7. int j;
  8. int temp;
  9. for (i = mid+1; i <= high; i++)
  10. {
  11. temp = a[i];
  12. for (j = i; j > low;j--)
  13. {
  14. if (temp < a[j - 1])
  15. {
  16. a[j] = a[j-1];
  17. }
  18. else
  19. {
  20. break;
  21. }
  22. }
  23. //既然已经接近排序好的。那么我们能够选择使用插入排序或者冒泡排序来提高效率
  24. //而且不开辟额外的空间。
  25. a[j] = temp;
  26. }
  27. }
  28. void Sert(int a[],int low,int high)
  29. {
  30. if (low >= high)return;
  31. int mid = (low + high) / 2;
  32. Sert(a,low, mid);
  33. Sert(a, mid + 1, high);
  34. Sort(a,low,mid,high);
  35. }
  36. int main()
  37. {
  38. int a[] = {6,2,1,3,4,-1,2-3,4,5,6,7,532,4,432,-23,
  39. -32,1,-3,21,-321,-3,5,6,8,432,5,66,991};
  40. Sert(a, 0,sizeof(a) / sizeof(int)-1);
  41. for (int i = 0; i < sizeof(a) / sizeof(int); i++)
  42. {
  43. cout << a[i] << " ";
  44. }
  45. cout << endl;
  46. return 0;
  47. }

C++归并排序总结的更多相关文章

  1. 算法与数据结构(十五) 归并排序(Swift 3.0版)

    上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...

  2. [算法]——归并排序(Merge Sort)

    归并排序(Merge Sort)与快速排序思想类似:将待排序数据分成两部分,继续将两个子部分进行递归的归并排序:然后将已经有序的两个子部分进行合并,最终完成排序.其时间复杂度与快速排序均为O(nlog ...

  3. 归并排序的java实现

    归并排序的优点不说了. 做归并排序之前,我先试着将两个有序数组进行排序,合并成一个有序数组. 思路:定义好两个有序数组,理解的时候我先思考了数组只有一个数组的排序,然后是两个元素的数组的排序,思路就有 ...

  4. JavaScript算法(归并排序与快速排序)

    归并排序与快速排序这两个算法放在一起,也是因为时间复杂度都是对数级别的. 目前看过的资料,归并排序看<学习JavaScript数据结构与算法>介绍的归并排序吧,快速排序直接看百度百科,讲的 ...

  5. 归并排序算法 java 实现

    归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...

  6. java归并排序,单线程vs多线程

    一.什么是归并排序 归并排序又称合并排序,它是成功应用分治技术的一个完美例子.对于一个需要排序的数组A[0..n-1],归并排序把它一分为二:A[0..n/2-1]和A[n/2..n-1],并对每个子 ...

  7. sphinx索引分析——文件格式和字典是double array trie 检索树,索引存储 – 多路归并排序,文档id压缩 – Variable Byte Coding

    1 概述 这是基于开源的sphinx全文检索引擎的架构代码分析,本篇主要描述index索引服务的分析.当前分析的版本 sphinx-2.0.4 2 index 功能 3 文件表 4 索引文件结构 4. ...

  8. php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序

    <?php$arr=array(12,25,56,1,75,13,58,99,22);//冒泡排序function sortnum($arr){    $num=count($arr);    ...

  9. [NOIP2013] 火柴排队(归并排序)

    题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...

  10. 用Java写算法之归并排序

    转自:http://flyingcat2013.blog.51cto.com/7061638/1281026 前面的三种排序算法(冒泡排序,选择排序,插入排序)在平均情况下均为O(n^2)复杂度,在处 ...

随机推荐

  1. shell 键盘录入和运算

    一.read 命令,从键盘读入数据,赋给变量 1.脚本代码 #!/bin/sh read arg1 arg2 echo "第一个参数: $arg1" echo "第二个参 ...

  2. BZOJ——1787: [Ahoi2008]Meet 紧急集合

    http://www.lydsy.com/JudgeOnline/problem.php?id=1787 题目描述 输入 输出 样例输入 6 4 1 2 2 3 2 4 4 5 5 6 4 5 6 6 ...

  3. WPF中多线程统计拆箱装箱和泛型的运行效率

    WPF中多线程统计拆箱装箱和泛型的执行效率.使用的知识点有泛型.多线程.托付.从样例中能够看到使用泛型的效率至少提升2倍 MainWindow.xaml <Window x:Class=&quo ...

  4. 37、ifconfig命令

    很多windows很熟悉ipconfig命令行工具.它被用来获取网络接口配置信息并对此进行改动.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config). 通常须 ...

  5. Process Monitor

    https://en.wikipedia.org/wiki/Process_Monitor Process Monitor is a free tool from Windows Sysinterna ...

  6. Medium上的文章

    Welcome to Medium, a place to read, write, and interact with the stories that matter most to you. 网站 ...

  7. Linux下grub的配置文件

    GRUB(统一引导装入器)是基本的Linux引导装入器. 其有四个作用,如下: 1.选择操作系统(如果计算机上安装了多个操作系统). 2.表示相应引导文件所在的分区. 3.找到内核. 4.运行初始内存 ...

  8. BZOJ 3569 询问删除指定的k条边后图是否连通 线性基

    思路: 这题思路好鬼畜啊-- 绝对是神思路 //By SiriusRen #include <cstdio> #include <algorithm> using namesp ...

  9. Re:从0开始的微服务架构:(一)重识微服务架构--转

    原文地址:http://www.infoq.com/cn/articles/micro-service-architecture-from-zero?utm_source=infoq&utm_ ...

  10. SparkShuffle调优原理和最佳实践

    在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packe ...