代码实现                                                                                                                                                                                  

#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std; int a[];
int tempA[]; #define BEGIN_RECORD \
{ \
clock_t ____temp_begin_time___; \
____temp_begin_time___=clock(); #define END_RECORD(dtime) \
dtime=float(clock()-____temp_begin_time___)/CLOCKS_PER_SEC;\
} /*
归并排序的合并过程
a - 待排序数组
l - 排序区域左边界
m - 排序区域中点
r - 排序区域右边界
*/
void merge(int a[], int l, int m, int r)
{
int i = l;
int j = m+;
int k; //int tempA[100000]; //空间复杂度O(n),在最后一次合并需要用到n个临时存储空间 //将两个有序排序区域合并成一个有序区域
//part1:两排序区域都从索引N(0,1...n)开始比较大小,取较小的值push进临时数组,同时该排序区域比较索引+1;当任一排序区域的值取完后,结束part1
for (k = l; i <= m && j <= r; k++)
{
if(a[i] <= a[j])
{
tempA[k] = a[i++];
}
else
{
tempA[k] = a[j++];
}
} //part2:将另一排序区域剩余的值按有序push进临时数组。此时临时数组为合并的有序区域。结束part2
if(i <= m)
for (; k <= r; k++)
tempA[k] = a[i++];
if(j <= r)
for (; k <= r; k++)
tempA[k] = a[j++]; //part3:将临时数组数据拷贝到原数组。排序结束
for (int k = l; k <= r; k++)
{
a[k] = tempA[k];
} } /**
归并排序
时间复杂度O(n*logn),
空间复杂度O(n)
在需要稳定排序的情况下,归并排序是最
在不考虑稳定性的情况下,归并排序由于需要O(n)的临时存储空间,比较耗费内存,效果不如快速排序
*/
void mergeSort(int a[], int l, int r)
{
int m; if(l < r)
{
m = (l + r)/;
//递归分解的过程,细分区域直到每个区域元素个数小于等于2
mergeSort(a, l, m-);
mergeSort(a, m+, r);
//归并过程
merge(a, l, m, r);
}
} void printArray(int a[], int length)
{
cout << "数组内容:";
for(int i = ; i < length; i++)
{
if(i == )
cout << a[i];
else
cout << "," << a[i]; }
cout << endl;
} int _tmain(int argc, _TCHAR* argv[])
{
float tim; for (int i = ; i < ; i++)
{
a[i] = int(rand() % );
} BEGIN_RECORD //printArray(a, sizeof(a)/sizeof(int));
mergeSort(a, , sizeof(a)/sizeof(int)-);
//printArray(a, sizeof(a)/sizeof(int)); END_RECORD(tim) cout << "运行时间:" << tim << "s" << endl; system("pause");
return ;
}

归并过程                                                                                                                                                    

处理海量数据的高级排序之——归并排序(C++)的更多相关文章

  1. 处理海量数据的高级排序之——希尔排序(C++)

    希尔算法简介                                                                                              ...

  2. 处理海量数据的高级排序之——堆排序(C++)

    在面对大数据量的排序时(100W以上量级数据),通常用以下三种的排序方法效率最高O(nlogn):快速排序.归并排序,堆排序.在这个量级上,其他冒泡,选择,插入等简单排序已经无法胜任,效率极低,跟前面 ...

  3. 处理海量数据的高级排序之——快速排序(C++)

    代码实现                                                                                                 ...

  4. 【高级排序算法】2、归并排序法的实现-Merge Sort

    简单记录 - bobo老师的玩转算法系列–玩转算法 -高级排序算法 Merge Sort 归并排序 Java实现归并排序 SortTestHelper 排序测试辅助类 package algo; im ...

  5. 【高级排序算法】1、归并排序法 - Merge Sort

    归并排序法 - Merge Sort 文章目录 归并排序法 - Merge Sort nlogn 比 n^2 快多少? 归并排序设计思想 时间.空间复杂度 归并排序图解 归并排序描述 归并排序小结 参 ...

  6. JAVA算法之高级排序

    本章介绍两种高级排序,希尔排序和快速排序,这两种排序比之前讲到的简单排序都要快很多:希尔排序大约需要O(N*(logN)2)的时间,快速排序的时间复杂度为(N*logN),这两种算法和我们在讲递归的时 ...

  7. 数据结构和算法(Golang实现)(23)排序算法-归并排序

    归并排序 归并排序是一种分治策略的排序算法.它是一种比较特殊的排序算法,通过递归地先使每个子序列有序,再将两个有序的序列进行合并成一个有序的序列. 归并排序首先由著名的现代计算机之父John_von_ ...

  8. javascript数据结构与算法--高级排序算法

    javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...

  9. 经典排序算法 - 归并排序Merge sort

    经典排序算法 - 归并排序Merge sort 原理,把原始数组分成若干子数组,对每个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到所有合并完,形成有序的数组 举例 无序数组[6 2 ...

随机推荐

  1. hdu 4035 2011成都赛区网络赛E 概率dp ****

    太吊了,反正我不会 /* HDU 4035 dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点 ...

  2. codeforces Round#380 div2

    1.字符串替换ogo+go…换成*** 思路:找ogo记录g位置,做初步替换和标记,非目标字母直接输出, 间隔为2的判断是否一个为标记g,一个为非标记做***替换 #include<iostre ...

  3. nginx配置文件nginx.conf

    #定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_processes 8; #全局错误日志定义类型,[ debug | in ...

  4. Struts2零配置介绍(约定访问)

    从struts2.1开始,struts2 引入了Convention插件来支持零配置,使用约定无需struts.xml或者Annotation配置 需要 如下四个JAR包 插件会自动搜索如下类 act ...

  5. RobotFramework自动化测试之环境搭建安装教程(一)

    RobotFramework是基于Python语言的工具,所以装RF之前要先安装Python: Python现在有2.7跟3.5两个版本,如果是先装了3.5的话,是装不了2.7的.只有先装2.7的 才 ...

  6. 【转】Linux 查看内存(free buffer cache)

    转自:http://elf8848.iteye.com/blog/1995638 Linux下如何查内存信息,如内存总量.已使用量.可使用量.经常使用Windows操作系统的朋友,已经习惯了如果空闲的 ...

  7. loadrunner获取本机的机器名称

  8. AngularJS学习之输入验证

    1.AngularJS可以验证表单和控件可以验证输入的数据: 2.输入验证:客户端不能确保用户输入数据的安全,所以服务器端的数据验证也是必须的: 3.应用实例: <! DOCTYPE html& ...

  9. iOS LoginDemo

    // // ViewController.m // FicowLoginDemo1 // // Created by Ficow on 15/11/12. // Copyright © 2015年 F ...

  10. 锐捷 Linux登录命令

    cd /home/ficow/桌面/rjsupplicant&&sudo chmod +x ./rjsupplicant.sh&&sudo chmod +x ./rjs ...