个人对归并排序的理解 1.也是分治法 2.先拆分,拆分总序列, (先不考虑奇数) 第一次拆分为N个子序列, 每个子序列元素有1个,俩俩合并子序列 第二次拆分为N/2子序列,每个子序列元素有2个, 俩俩合并子序列 第三次拆分为N/4子序列,每个子序列元素有4个,俩俩合并子序列 ----------n/2^n ------------------ 2^n
...最后拆分为2个子序列,每个子序列元素有N/2个,俩俩合并子序列,成为新的有序序列 3.因为拆分的子序列都是有序的,合并速度非常快。归并效率很高

时间复杂度 平均速度 O(N*logN) 稳定排序 #include using namespace std;

        void print(int a[], int n){for(int j= 0; j<n; j++){cout<<a[j] <<"  ";}cout<<endl;}//将r[i…m]和r[m +1 …n]归并到辅助数组rf[i…n]void Merge(int *r,int *rf, int i, int m, int n){int j,k;for(k=i,j=m+1; i<=m && j <=n ; ++k){if(r[j] < r[i]) rf[k] = r[j++];else rf[k] = r[i++];}while(i <= m)  rf[k++] = r[i++];while(j <= n)  rf[k++] = r[j++];//    print(rf,n+1);}void MergeSort(int *r, int *rf, int lenght){int len = 1;int *q = r ;int *tmp ;while(len < lenght) {len = 2 * len ;int i = 0;while(i+ len <lenght) {Merge(q, rf,  i, i+ len/2 -1, i+ len-1 ); //对等长的两个子表合并i = i+ len;}if(i + len/2 < lenght+1){ // 这里要+1Merge(q, rf,  i, i+ len/2 -1, lenght -1); //对不等长的两个子表合并}tmp = q; q = rf; rf = tmp; //交换q,rf,以保证下一趟归并时,仍从q 归并到rf}}int main(){int a[19] = {3,1,5,7,2,4,9,6,8,0,20,3,5,6,7,-1,-1,-2,0};int b[19];MergeSort(a, b,19);cout<<"结果:";print(b,19);}
复制代码
  • ######看我那么可爱n(≧▽≦)n
  • 关注我的微薄 (梁同桌):http://weibo.com/tongrenyinsheng
  • 个人博客: http://www.liangtongzhuo.com
  • ios 个人写的app (同人音声)ASMR音乐

转载于:https://juejin.im/post/5a31f18e51882503dc53b88b

数据结构 归并排序 C++相关推荐

  1. 数据结构----归并排序

    数据结构----归并排序 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> #define N 100 void gui ...

  2. python算法与数据结构-归并排序算法

    代码如下所示: # -*-coding=utf-8-*- def merge_sort(alist):"""归并排序"""n = len(a ...

  3. 数据结构——归并排序

    1. 归并排序 分治模型在每层递归时都有三个步骤: 分解原问题为若干子问题,这些子问题是原问题的规模较小的实例: 解决这些子问题,递归地求解各子问题.然而,若子问题的规模足够小,则直接求解: 合并这些 ...

  4. (五) 数据结构 - 归并排序

    归并排序 归并排序是一种基于分而治之的排序技术.最坏情况下的时间复杂度为O(nlogn),它是最受人尊敬的算法之一.归并排序首先将数组分成相等的两半,然后以排序的方式将它们合并. 核心思想 为了理解合 ...

  5. 数据结构---归并排序和外部排序

    内部排序 若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序. 外部排序 若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序. 就地排序 若排序算 ...

  6. 数据结构与算法系列——从菜鸟到入门

    持续更新系列. 参考自:<数据结构与算法分析--Java语言描述>.<算法导论> 排序 数据结构--快速排序 数据结构--堆排序 数据结构--归并排序 数据结构--计数排序 数 ...

  7. Caché 算法与数据结构

    第一章 Caché 算法与数据结构 基础和概念 ☆☆☆☆☆ 第二章 Caché 算法与数据结构 数组原理 ☆☆☆☆☆ 第三章 Caché 算法与数据结构 链表原理 ☆☆☆☆☆ 第四章 Caché 算法 ...

  8. invoke 数组_如何对一个亿的数组进行快速排序

    总结概括: 1.数据结构 归并排序 (也是后续排序 LRD) 2.多线程 ForkJoin框架 繁重任务的并行计算框架,map-reduce思想 计算代码 /****@author dongsheng ...

  9. NOIP2013 提高组复赛解题报告

    NOIP2013 提高组复赛 day1 day\;1 1002. 火柴排队 贪心+数据结构/归并排序 这个"相邻交换"让我联想到了NOIP2012_day1_task2_game那 ...

最新文章

  1. 管理员端API——任仲行
  2. 12.源码阅读(app启动流程-android api 26)
  3. 13.1.2 WEB应用程序
  4. 华为root工具_华为Mate9解锁后无法ROOT 需要手动刷入Recovery怎么办【解决方法】...
  5. cas登录成功后不跳转成功页面_SpringSecurity用户登录成功后页面跳转原理剖析
  6. matlab实现id3,MATLAB简单实现ID3
  7. CTFbugku--菜鸟初学
  8. 计算机设计大赛西北地区赛,我校学生在中国大学生计算机设计大赛西北地区赛中获佳绩...
  9. Somatic vs Germline Mutations
  10. python xpath 中文乱码_Python爬虫实战 批量下载高清美女图片!让你们开开眼!
  11. 鼠标宏设置到鼠标左键,重置回去!
  12. java运行无法加载主类_java运行显示“找不到或无法加载主类”的解决办法(linux)...
  13. 分享个永久免费的虚拟主机|PHP空间商
  14. 计算机无法识别苹果6手机,苹果手机连接电脑没反应,小编教你苹果手机连接电脑没反应怎么办...
  15. matlab tif dpi,轻松解决杂志要求的300dpi分辨率、TIFF格式图片
  16. html网页页尾,终于认识网页页尾设计注意技巧
  17. 获取微信公众号文章封面图的技巧/网站
  18. 奇迹按键精灵挂机脚本_奇迹脚本代码导入按键精灵后怎么使用?
  19. matlab曲线已知y求x,已知X、Y用MATLAB绘制曲线
  20. Java 实现视频弹幕功能

热门文章

  1. 取石头游戏 c语言,[HNOI2010]取石头游戏(博弈论+贪心)
  2. 查询时间范围_MySQL慢查询(中):正确处理姿势,你get到了吗?
  3. 零基础学怎么学Java_零基础学java难么?怎么自学?
  4. 第十六届智能车竞赛相关的提问:2021-5
  5. 2021春季学期-创新设计与实践-Lesson3
  6. 基于MEGA8的声音CLICK模块
  7. 小功率荧光灯拆解分析
  8. 为什么单片机通常只有那么小的数据内存?
  9. 智能车竞赛中的人工智能
  10. c语言排班系统设计报告,C语言课程设计关于排班系统的一些问题