二路归并排序

  1. 实现思想

    • 将两个位置相邻的记录有序子序列归并为一个记录有序的序列。
  2. 时间复杂度
    • 最好情况:O(nlogn)
    • 最坏情况:O(nlogn)
    • 平均时间复杂度:O(nlogn)
  3. 空间复杂度
    • O(n)
  4. 稳定性
    • 稳定

代码

 #include<stdio.h>void Merge(int tr[],int r[],int i,int m,int n){int j,k;for(j=m+1,k=i;i<=m&&j<=n;k++){if(tr[i]<tr[j])r[k]=tr[i++];elser[k]=tr[j++];}while(i<=m)r[k++]=tr[i++];while(j<=n)r[k++]=tr[j++];}/*2-路归并排序【r1和r2指向的是同一块内存,对r2进行归并就是对r1进行归并】*/void MSort(int r1[],int r2[],int i,int n){int m;int tr[9];if(r1[i]==r1[n])r2[i]=r1[i];else{m=(i+n)/2;MSort(r1,tr,i,m);   /*先将r1装到tr*/MSort(r1,tr,m+1,n); /*先将r1装到tr*/Merge(tr,r2,i,m,n); /*再将tr装到r2【注意不能是r1】*/}}void Output(int rcd[],int len){int i;for(i=1;i<=len;i++){   //从r[1]开始输出,r[0]作为哨兵,不输出printf("%d ",rcd[i]);}printf("\n");}void main(){int len=8;  //对8个元素进行排序int rcd[9]={0,3,1,7,5,2,4,9,6}; //r[0]不存储元素,r[1]到r[8]存储元素printf("未排序的集合为:\n");Output(rcd,len);MSort(rcd,rcd,1,len);   //2-路归并排序printf("从小到大排序后的集合为:\n");Output(rcd,len);}

C语言实现二路归并排序相关推荐

  1. 数据结构源码笔记(C语言):二路归并排序

    //实现二路归并排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20 //线性表中最多元素个数typedef int ...

  2. 二路归并排序c语言实现

    二路归并排序主要运用了"分治算法",分治算法就是将一个大的问题划分为n个规模较小而结构相似的子问题. 这些子问题解决的方法都是类似的,解决掉这些小的问题之后,归并子问题的结果,就得 ...

  3. C语言merge sort归并排序算法(附完整源码)

    C语言merge sort归并排序算法 merge sort归并排序算法的完整源码(定义,实现) merge sort归并排序算法的完整源码(定义,实现) #ifndef MERGE_SORT_H # ...

  4. 二路归并排序简介及其并行化

    1.归并排序简介 1.1算法思想 归并排序属于比较类非线性时间排序,比较类排序中性能最佳,应用较为广泛. 归并排序是分治法(Divide and Conquer)的一个典型的应用.将已有序的子序列合并 ...

  5. C++实现二路归并排序算法

    排序算法分为五大类,一共是有九种,如下: 插入类:直接插入排序.折半插入排序.希尔排序 交换类:冒泡排序.快速排序 选择类:简单选择排序.堆排序 归并类:二路归并排序 基数类:多关键字排序 九种算法的 ...

  6. 二路归并排序原理及JAVA实现

    归并类排序 基本思想:首先将原始无序序列划分为两个子序列,然后分别对每个子序列递归地进行排序,最后再将有序子序列合并. 归并排序基于分治策略思想.前面提到的基于分治的快速排序重在"分&quo ...

  7. 二路归并排序及时间复杂度分析

    序言 二路归并排序是一种效率极高的递归排序,将数组A化为有序数组时间复杂度为O(nlogn). 思想 二路归并排序分为拆分数组以及合并两个操作. 切分(自上而下)时间复杂度2*T(n/2) 每次从数组 ...

  8. 二路归并排序Python实现-III

    二路归并排序Python实现-III 归并排序 是一种 效率比较高并且稳定的算法.时间复杂度 O(NLog(N)),空间复杂度 O(N). 归并排序(Merge Sort)是建立在归并操作上的一种有效 ...

  9. 数据结构——二路归并排序和基数排序

    二路归并排序 算法原理 假设该数组为q,左边界为 l,右边界为 r,并设置临时数组tmp. 采用分治思想: 第一步:确定分界点: mid = l + r >>1. 第二步:递归划分左右两段 ...

  10. Sort List(二路归并排序)

    题目链接:https://leetcode.com/problems/sort-list/description/ 题目要求:对链表进行排序,时间复杂度O(n),常数的空间复杂度 两种解法,本质上都是 ...

最新文章

  1. Cocos Creator 键盘监听事件
  2. Web服务器的工作原理
  3. 关于纯cs3动画的五个原创实例分享
  4. poj 1860 拓扑。。
  5. php 换行替换成p,php 换行如何替换
  6. 网页静态化和网页伪静态化之间的区别与选择
  7. java独步寻花,小班语言《江畔独步寻花》
  8. Xcode + cocoapods + jenkins + fastlane + git + 蒲公英自动化打包 上传
  9. i3处理器_英特尔低端霸主酷睿I3处理器又降10元!机器怎么配?为粉丝答疑
  10. python适合自学编程吗-孩子学编程选Scratch还是Python
  11. 输入一个链表,输出该链表中倒数第k个结点
  12. 二进制十进制间小数怎么转换
  13. win10录屏_win10录屏打不开怎么办?怎么给win10录制屏幕视频?
  14. mysql in查询效率真的低_MySql中in查询效率低的替代方法
  15. 笔记本 无线网联网 win10系统 ,台式机木有无线网卡,通过一根网线连接两台电脑,使台式机联网。...
  16. 写在而立之年到来之前
  17. 考研英国文学复习要点
  18. Android截取人物头像,Android 图片截取人物头像(仿逗拍)
  19. 可能是全网最详细的python安装教程(windows),小白建议收藏
  20. 天秤座 的个人分析,真的很准,这段时间一直在关注星座。

热门文章

  1. 大数据在智慧城市建设中的作用与深度应用
  2. 智慧城市大数据运营中心及城市大脑综合运行管理平台建设方案WORD
  3. 支持对抗样本防御的AI加速器架构设计
  4. java单例的生命周期_Spring Bean生命周期详解
  5. 材料模拟python_关于材料计算,模拟,仿真什么区别?
  6. Python官方中文文档网址和Python标准库官方中文文档网址
  7. 关于brvah的setEmptyView功能无法显示问题
  8. 软件测试文档类型有哪些?
  9. java基本语法(史上最全)
  10. ch340 ch341 驱动安装失败 提示 inf中的服务安装段落无效 代码28