各种排序总结(六)归并排序
1 /**************** 2 思路:假设待排序有n个记录,将这n个记录看成n个有序的子序列,每个子序列长度为1, 3 然后两两归并。 4 如何将将二个有序数列合并:这个非常简单,只要从比较二个数列的第一个数, 5 谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空, 6 那直接将另一个数列的数据依次取出即可。 7 ****************/ 8 #include <iostream> 9 10 using namespace std; 11 12 //将有二个有序数列arr[first...mid]和arr[mid...last]合并。主要是merge这个函数 13 void Merge(int* arr, int first, int mid, int last, int* temp) 14 { 15 int f1 = first; 16 int m = mid; 17 int f2 = mid+1; 18 int l = last; 19 int i = 0; 20 while((f1 <= m)&&(f2 <= l)) 21 { 22 if(arr[f1] < arr[f2]) 23 temp[i++] = arr[f1++]; 24 else 25 temp[i++] = arr[f2++]; 26 } 27 while(f1 <= m) 28 temp[i++] = arr[f1++]; 29 while(f2 <= l) 30 temp[i++] = arr[f2++]; 31 for(int j=0; j<i; j++) 32 arr[first + j] = temp[j]; 33 } 34 35 36 void MergeSort(int* arr, int first, int last, int* temp) 37 { 38 int mid; 39 if(first < last) //if first >= last, return 40 { 41 mid = (first + last) /2; 42 MergeSort(arr, first, mid, temp); 43 MergeSort(arr, mid+1, last, temp); 44 Merge(arr,first, mid, last, temp); 45 } 46 } 47 48 49 int main() 50 { 51 int * arr; 52 int * temp; 53 int n; 54 cout<<"Input the arr length:"<<endl; 55 cin>>n; 56 arr = new int[n]; 57 temp = new int[n]; 58 cout<<"Input the arr elements:"<<endl; 59 for(int i=0;i<n;i++) 60 { 61 cin>>arr[i]; 62 } 63 MergeSort(arr,0,n-1,temp); 64 cout<<"The outcome:"<<endl; 65 for(int i=0;i<n;i++) 66 cout<<arr[i]<<endl; 67 return 0; 68 } 69 /************************ 70 稳定的。 71 时间复杂度:归并排序不依赖与原始数组的输入情况,每次划分时两个子序列长度都是基本一样的, 72 因此最大、最小和平均时间均为O(nlogn)。 73 空间复杂度:用到一个临时数组,因此空间代价为O(n)。 74 总结: 75 1.排序时间不依赖于原始数组; 76 2.时间为O(nlogn),因此适用于数组n较大的情况; 77 3.空间代价为O(n)。 78 *************************/
转载于:https://www.cnblogs.com/CnZyy/p/3314705.html
各种排序总结(六)归并排序相关推荐
- 单链表排序----快排 归并排序
单链表排序----快排 & 归并排序 原文:http://blog.csdn.net/u012658346/article/details/51141288 题目描述: 给定一个乱序的单链表 ...
- 排序算法:归并排序、快速排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.归并排序: 1.工作原理: 归 ...
- 排序算法之--归并排序(好玩的一个算法o。o)快速入门
排序算法之--归并排序(好玩的一个算法o.o) 下面是归并操作的基本思路(注意:是归并操作哦,不是归并排序哦) 归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存 ...
- NOI提高级:排序算法之归并排序、快速排序
图解排序算法(四)之归并排序 图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 小学生图解排序算法:⑥归并排序 小学生图解排序算法:⑥归并排序_纯文笔记-CSDN博客_图解 ...
- 结合内存分析java归并排序_排序算法之归并排序(Mergesort)解析
一.归并排序的优缺点(pros and cons) 耗费心思来理解它,总要有个理由吧:归并排序的效率达到了巅峰:时间复杂度为O(nlogn),这是基于比较的排序算法所能达到的最高境界 归并排序是一种稳 ...
- 数据结构与算法:十大排序算法之归并排序
数据结构与算法:十大排序算法之归并排序 package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/ ...
- [Alg]排序算法之归并排序
[Alg]排序算法之归并排序 作者:屎壳郎 miaosg01@163.com 日期:Aug 2021 版次:初版 简介: 归并排序是一类在任何情况下都能保证Nlg(N)N\lg(N)Nlg(N)的排 ...
- 【排序算法】归并排序(C语言)
[排序算法]-- 归并排序(C语言) 目录 一.归并排序的原理 二.两个有序数组排序和合并 1. 原地排序 2. 创建临时空间 二.递归实现 三.非递归实现 1. 实现思路 2. 数组边界问题 3. ...
- 排序算法六:选择排序之直接选择排序
排序算法六:选择排序之直接选择排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评& ...
- 排序算法之归并排序和外部排序
文章目录 一.归并排序 1.算法描述 2.算法图解 (1)合并相邻有序子序列 (2)整体过程 3.算法demo 4.算法总结 二.外部排序 1.算法描述 2.算法图解 3.算法demo 一.归并排序 ...
最新文章
- shell的最大命令行长度
- python sys模块 输入输出 错误流
- mysql调试事件_mysql日志管理分析调试实例_mysql
- ACM计算几何题目推荐
- 外网访问FTP出错200 Type set to A
- SpringBoot @Cacheable缓存注解的使用
- android碎片实验报告,实验报告
- 面试官 | 说一下 JVM 常用参数有哪些?
- Snipaste在Window运行后遇到提示计算机中丢失 api-ms-win-crt-runtime-l1-1-0.dll 错误
- 【Java线程】“打工人”初识线程池及自定义线程池实战
- java虚拟机 函数表_java虚拟机 jvm 局部变量表实战
- linux jvm启动过程,Linux操作系统启动过程详解
- 两直线夹角求解-Python编程实现
- 使用云函数快速升级网易云音乐等级
- 安装旧版本Xcode——MACOS
- Android项目开发Crime
- Running “flutter pub get“ in xxx... 报错: Git error 443
- 狄拉克δ函数的数学迷思
- Samsara v2.0 高级技巧
- 企业微信开发(一)网页授权登录
热门文章
- Px4源码框架结构图
- opencv+pythons相机标定源码解析
- centos7.4 U盘安装卡在 starting dracut initqueue hook
- 找到数组中第k小的值(利用快排的划分函数)
- Java数三退一问题代码_数三退一问题算法(Java)
- java中单列集合的根接口是_java 单列集合总结
- log4j:WARN Please initialize the log4j system properly
- 深入理解DefaultMessageListenerContainer
- Tomcat 6 数据源配置
- 一个页面是否应该全部组件化