数据结构 - 归并排序(merging sort)
归并排序(merging sort): 包含2-路归并排序, 把数组拆分成两段, 使用递归, 将两个有序表合成一个新的有序表.
归并排序(merge sort)的时间复杂度是O(nlogn), 实际效果不如快速排序(quick sort)和堆排序(heap sort),
但是归并排序是稳定排序, 而快速排序和堆排序则不是.
代码:
- /*
- * main.cpp
- *
- * Created on: 2014.6.12
- * Author: Spike
- */
- /*eclipse cdt, gcc 4.8.1*/
- #include <iostream>
- #include <algorithm>
- #include <iterator>
- using namespace std;
- /*参数: SR-输入数组, TR-输出数组, i至m:第一段有序, m+1至n:第二段有序*/
- void Merge (const std::vector<int> SR, std::vector<int>& TR, int i, int m, int n)
- {
- int j , k;
- for (j=m+1, k=i; i<=m && j<=n; ++k) {
- if (SR[i] < SR[j])
- TR[k] = SR[i++];
- else
- TR[k] = SR[j++];
- }
- if (i<=m)
- std::copy((SR.begin()+i), (SR.begin()+m+1), TR.begin()+k);
- if (j<=n)
- std::copy((SR.begin()+j), (SR.begin()+n+1), TR.begin()+k);
- }
- /*参数: SR-输入数组, TR-输出数组, s:起始, t:末尾*/
- void MSort (const std::vector<int> SR, std::vector<int>& TR, int s, int t)
- {
- std::vector<int> tempTR(SR.size());
- if (s == t)
- TR[s] = SR[s];
- else {
- int m = (s+t)/2; //平分SR, SR[s..m]和SR[m+1..t]
- MSort(SR, tempTR, s, m); //前半段
- MSort(SR, tempTR, m+1, t); //后半段
- Merge(tempTR, TR, s, m, t); //排序
- //copy(TR.begin(), TR.end(), ostream_iterator<int>(cout, " "));
- //std::cout << std::endl;
- }
- }
- void MergeSort (std::vector<int>& L) {
- MSort(L, L, 0, L.size()-1);
- }
- int main (void)
- {
- std::vector<int> L = {49, 38, 65, 97, 76, 13, 27, 49};
- MergeSort(L);
- copy(L.begin(), L.end(), ostream_iterator<int>(cout, " "));
- std::cout << std::endl;
- return 0;
- }
输出:
- 13 27 38 49 49 65 76 97
数据结构 - 归并排序(merging sort)的更多相关文章
- 数据结构 - 归并排序(merging sort) 具体解释 及 代码
归并排序(merging sort) 具体解释 及 代码 本文地址: http://blog.csdn.net/caroline_wendy 归并排序(merging sort): 包括2-路归并排序 ...
- 归并排序(Merging Sort)
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 小小c#算法题 - 8 - 归并排序 (Merging Sort)
“归并”的含义是将两个或两个以上的有序序列组合成一个新的有序序列.这个“归并”可以在O(n+m)的数量级上实现,但这同时也需要O(n+m)的空间复杂度.具体为:首先分配一个新的长度为n+m的空序列,然 ...
- FZU 1919 -- K-way Merging sort(记忆化搜索)
题目链接 Problem Description As we all known, merge sort is an O(nlogn) comparison-based sorting algorit ...
- 经典排序算法 - 归并排序Merge sort
经典排序算法 - 归并排序Merge sort 原理,把原始数组分成若干子数组,对每个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到所有合并完,形成有序的数组 举例 无序数组[6 2 ...
- 算法与数据结构基础 - 排序(Sort)
排序基础 排序方法分两大类,一类是比较排序,快速排序(Quick Sort).归并排序(Merge Sort).插入排序(Insertion Sort).选择排序(Selection Sort).希尔 ...
- 连续线性空间排序 起泡排序(bubble sort),归并排序(merge sort)
连续线性空间排序 起泡排序(bubble sort),归并排序(merge sort) 1,起泡排序(bubble sort),大致有三种算法 基本版,全扫描. 提前终止版,如果发现前区里没有发生交换 ...
- Python入门篇-数据结构堆排序Heap Sort
Python入门篇-数据结构堆排序Heap Sort 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.堆Heap 堆是一个完全二叉树 每个非叶子结点都要大于或者等于其左右孩子结点 ...
- 排序算法二:归并排序(Merge sort)
归并排序(Merge sort)用到了分治思想,即分-治-合三步,算法平均时间复杂度是O(nlgn). (一)算法实现 private void merge_sort(int[] array, int ...
随机推荐
- [BTS]The join order has been enforced because a local join hint is used.;Duplicate key was ignored.".
在一个客户的BizTalk Server 2013 R2环境中会报如下的ERROR,查找相关资料后,先试试停掉所有Trace. Log Name: ApplicationSource: ...
- Qt之课外实践——文件操作(简单清道夫)
说明:这个小项目是关于文件操作的.主要的功能有:重复文件的查找(根据文件的大小),说白了,就是讲大小相同的文件在一起显示出来,供用户自由的选择删除.这个360云盘里的文件去重还差的很远.还有空文件夹的 ...
- 深究JS异步编程模型
前言 上周5在公司作了关于JS异步编程模型的技术分享,可能是内容太干的缘故吧,最后从大家的表情看出"这条粉肠到底在说啥?"的结果:(下面是PPT的讲义,具体的PPT和示例代码在h ...
- paip.java OutOfMemoryError 解决方法o33
paip.java OutOfMemoryError 解决方法o33 java.lang.OutOfMemoryError: Requested # java.lang.OutOfMemoryErro ...
- 浅谈NSBundle
图片.xib等资源文件无法直接封入静态库,要想在静态库中使用他们,就必须借助于bundle 那么什么是bundle呢? 简单来说,bundle就是一个内部结构按照标准规则组织的特殊目录,即direct ...
- 如何保证access_token长期有效
为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等,开发者在调用这些接口时,都需要传入一个相 ...
- [转]Oracle因安装时未设定字符集导致中文乱码的解决方案
在CentOS 6.4上安装Oracle 11g没有设定字符集,采用的是操作系统默认字符集:WE8MSWIN1252,将字符集修改为:AL32UTF8. SQL> select userenv( ...
- Leetcode 292 Nim Game 博弈论
class Solution {public: bool canWinNim(int n) { return n % 4 != 0; }};
- android: 通过内容提供器读取系统联系人
读取系统联系人 由于我们之前一直使用的都是模拟器,电话簿里面并没有联系人存在,所以现在需要自 己手动添加几个,以便稍后进行读取.打开电话簿程序,界面如图 7.1 所示. 图 7.1 可以看到,目前 ...
- VS2015 C#6.0 中的那些新特性
本人个人博客原文链接地址为http://aehyok.com/Blog/Detail/66.html. 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok ...