归并排序(merging sort) 具体解释 及 代码

本文地址: http://blog.csdn.net/caroline_wendy

归并排序(merging sort): 包括2-路归并排序, 把数组拆分成两段, 使用递归, 将两个有序表合成一个新的有序表.

归并排序(merge sort)的时间复杂度是O(nlogn), 实际效果不如高速排序(quick sort)和堆排序(heap sort),

可是归并排序是稳定排序, 而高速排序和堆排序则不是.

代码:

  1. /*
  2. * main.cpp
  3. *
  4. * Created on: 2014.6.12
  5. * Author: Spike
  6. */
  7.  
  8. /*eclipse cdt, gcc 4.8.1*/
  9.  
  10. #include <iostream>
  11. #include <algorithm>
  12. #include <iterator>
  13.  
  14. using namespace std;
  15.  
  16. /*參数: SR-输入数组, TR-输出数组, i至m:第一段有序, m+1至n:第二段有序*/
  17. void Merge (const std::vector<int> SR, std::vector<int>& TR, int i, int m, int n)
  18. {
  19. int j , k;
  20. for (j=m+1, k=i; i<=m && j<=n; ++k) {
  21. if (SR[i] < SR[j])
  22. TR[k] = SR[i++];
  23. else
  24. TR[k] = SR[j++];
  25. }
  26. if (i<=m)
  27. std::copy((SR.begin()+i), (SR.begin()+m+1), TR.begin()+k);
  28. if (j<=n)
  29. std::copy((SR.begin()+j), (SR.begin()+n+1), TR.begin()+k);
  30. }
  31.  
  32. /*參数: SR-输入数组, TR-输出数组, s:起始, t:末尾*/
  33. void MSort (const std::vector<int> SR, std::vector<int>& TR, int s, int t)
  34. {
  35. std::vector<int> tempTR(SR.size());
  36. if (s == t)
  37. TR[s] = SR[s];
  38. else {
  39. int m = (s+t)/2; //平分SR, SR[s..m]和SR[m+1..t]
  40. MSort(SR, tempTR, s, m); //前半段
  41. MSort(SR, tempTR, m+1, t); //后半段
  42. Merge(tempTR, TR, s, m, t); //排序
  43. //copy(TR.begin(), TR.end(), ostream_iterator<int>(cout, " "));
  44. //std::cout << std::endl;
  45. }
  46. }
  47.  
  48. void MergeSort (std::vector<int>& L) {
  49. MSort(L, L, 0, L.size()-1);
  50. }
  51.  
  52. int main (void)
  53. {
  54. std::vector<int> L = {49, 38, 65, 97, 76, 13, 27, 49};
  55. MergeSort(L);
  56. copy(L.begin(), L.end(), ostream_iterator<int>(cout, " "));
  57. std::cout << std::endl;
  58. return 0;
  59. }

输出:

  1. 13 27 38 49 49 65 76 97

数据结构 - 归并排序(merging sort) 具体解释 及 代码的更多相关文章

  1. 数据结构 - 归并排序(merging sort)

    归并排序(merging sort): 包含2-路归并排序, 把数组拆分成两段, 使用递归, 将两个有序表合成一个新的有序表. 归并排序(merge sort)的时间复杂度是O(nlogn), 实际效 ...

  2. 数据结构 - 堆排序(heap sort) 具体解释 及 代码(C++)

    堆排序(heap sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 堆排序包括两个步骤: 第一步: 是建立大顶堆(从大到小排 ...

  3. 数据结构 - 希尔排序(Shell&#39;s Sort) 具体解释 及 代码(C++)

    数据结构 - 希尔排序(Shell's Sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2 ...

  4. 数据结构 - 树形选择排序 (tree selection sort) 具体解释 及 代码(C++)

    树形选择排序 (tree selection sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 算法逻辑: 依据节点的大小, ...

  5. 归并排序(Merging Sort)

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  6. 小小c#算法题 - 8 - 归并排序 (Merging Sort)

    “归并”的含义是将两个或两个以上的有序序列组合成一个新的有序序列.这个“归并”可以在O(n+m)的数量级上实现,但这同时也需要O(n+m)的空间复杂度.具体为:首先分配一个新的长度为n+m的空序列,然 ...

  7. 数据结构 - 表插入排序 具体解释 及 代码(C++)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/24323125 表插入排序 具体解释 及 代码 ...

  8. 数据结构 - 2-路插入排序 具体解释 及 代码(C++)

    2-路插入排序 具体解释 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24267679 2-路插入排序的思想非常有意思 ...

  9. FZU 1919 -- K-way Merging sort(记忆化搜索)

    题目链接 Problem Description As we all known, merge sort is an O(nlogn) comparison-based sorting algorit ...

随机推荐

  1. SSH整合报错:找不到元素 'beans' 的声明

    转自:https://blog.csdn.net/haozhugogo/article/details/54233608 spring版本问题,将bean.xml中xsd文件定义的版本改为spring ...

  2. subprocess学习

    转自http://blog.csdn.net/imzoer/article/details/8678029 subprocess的目的就是启动一个新的进程并且与之通信. subprocess模块中只定 ...

  3. shp系列(四)——利用C++进行Shx文件的读(打开)

    1.shx文件的基本情况 shx文件又叫索引文件,主要包含坐标文件的索引信息,文件中每个记录包含对应的坐标文件记录距离坐标文件的初始位置的偏移量.通过索引文件可以很方便地在坐标文件中定位到指定目标的坐 ...

  4. Orcal的JDBC数据连接方式

    package cn.com.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepar ...

  5. ROS-tutorials-launch-查看日志

    前言:launch文件的作用是一次可以启动多个节点. 1.新建launch文件 在chapter2_tutorials包下新建launch文件夹,并在launch文件夹下新建chapter2.laun ...

  6. guice基本使用,guice整合guice-servlet,web开发(五)

    介绍 Guice Servlet 为使用web应用程序和Servlet容器提供了一个完整的模式.. Guice's servlet 扩展允许从你的servlet应用中完全淘汰web.xml,并且具有类 ...

  7. MongoDB: The Definitive Guide

    第一章 简介 MongoDB是面向文档的数据库,不是关系型数据库.内置对MapReduce的支持,以及对地理空间索引的支持. 丰富的数据模型 容易扩展,它所采用的面向文档的数据模型可以使其在多台服务器 ...

  8. WordPress瀑布流主题PinThis中文版v1.6.8

    PinThis主题来源于英语网站http://pinthis.pixelbeautify.com/的汉化(语言文件+控制面板),中文版采用的是翻译器手工核对,并不完美,只对主题中文化,其他没做任何更改 ...

  9. vue-留言板-bootstrap

    最近看完入门API,看完视频自己写了个留言板,因为主要是学习vue,所以就复习了一下bootstrap,布局更简单,先看看样式吧. 简单清晰的布局,先说一下功能, 1.输入用户名密码点击提交放入表格 ...

  10. 项目随笔之springmvc中freemark如何获取项目路径

    转载:http://blog.csdn.net/whatlookingfor/article/details/51538995 在SpringMVC框架中使用Freemarker试图时,要获取根路径的 ...