归并排序是建立在归并操作上的一种有效的算法,该算法是采用分治法的一个非常典型的应用,

是一种稳定的排序算法。

将已有的子序列合并,得到完全有序的的序列;即先使每个子序列有序,再使子序列段间有序。

若将两个有序表合并成一个有序表,成为二路归并。

代码实现如下:

#include "stdio.h"
#include "malloc.h"
#include "string.h"void PrintfArray(int* ar, int left,int right)
{for (int i = left; i < right; i++)printf("%d ", ar[i]);
}void _MergeSort(int* ar, int left, int right,int *tmp)
{if (left >= right)return;int mid = (right + left) / 2;_MergeSort(ar, left, mid, tmp);_MergeSort(ar, mid + 1, right, tmp);int begin1 = left, end1 = mid;int begin2 = mid + 1, end2 = right;int k = left;while (begin1 <= end1 && begin2 <= end2){if (ar[begin1] < ar[begin2])tmp[k++] = ar[begin1++];elsetmp[k++] = ar[begin2++];}while (begin1 <= end1)tmp[k++] = ar[begin1++];while (begin2 <= end2)tmp[k++] = ar[begin2++];memcpy(ar + left, tmp + left, sizeof(int)*(right - left + 1));}void MergeSort(int* ar, int left, int right)
{int n = right - left;int* tmp = (int*)malloc(sizeof(int)*n);_MergeSort(ar, left, right - 1, tmp);free(tmp);tmp = NULL;}int main()
{int ar[] = {13,37,34,78,90,88,12 };int n = sizeof(ar) / sizeof(ar[0]);PrintfArray(ar, 0, n);MergeSort(ar,0,n);printf("\n");PrintfArray(ar, 0, n);
}

归并排序(C语言完整代码)相关推荐

  1. 分块查找(完整案例与C语言完整代码实现)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  2. 拓扑排序(完整案列及C语言完整代码实现)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  3. 最短路径之迪杰斯特拉(Dijkstra 算法)弗洛伊德算法(C语言完整代码实现)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  4. 数据结构上机-尾、头插法建立单链表-单链表遍历C语言完整代码实现

    点击此处跳转视频链接:数据结构上机-尾.头插法建立单链表-单链表遍历C语言完整代码实现

  5. C语言完整代码实现:二叉树的先序遍历、中序遍历、后序遍历

    一.先序遍历原理 先序遍历就是:根.左.右,也就是先遍历根结点再遍历左结点最后再遍历右结点,注意:如果遍历到的结点不是叶子结点的话需要对该结点进行拆分,比如这棵二叉树: 先遍历A,然后是B,然后再是C ...

  6. 数据结构《顺序栈》知识点详解+C语言完整代码-超详细

    顺序栈 栈 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 实现方式 C语言代码实现 1. 顺序栈的表示 2. 结构体 3.初始化 4.入栈 5.出栈 6. 取栈顶元素 7.求长 8 ...

  7. 【操作系统实验】Linux环境下用进程实现哲学家进餐问题——C语言完整代码+详细实验报告

    [注意]代码在文末,以下为详细实验报告 [实验目的]   以哲学家进餐问题为例,学习并熟悉Linux下进程通信.同步机制的具体实现方法,主要是了解并掌握信号量机制和避免死锁的使用方法,使得不会出现哲学 ...

  8. 【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器客户端完整代码示例 | 运行服务器端与客户端效果及过程分析 )

    文章目录 一.服务器端完整代码 Server.groovy 二.客户端完整代码 Client.groovy 三.运行服务器端与客户端效果及过程分析 一.服务器端完整代码 Server.groovy 参 ...

  9. 校运动会c语言程序编写,校运动会管理系统报告C语言(含完整代码)

    <校运动会管理系统报告C语言(含完整代码)>由会员分享,可在线阅读,更多相关<校运动会管理系统报告C语言(含完整代码)(20页珍藏版)>请在人人文库网上搜索. 1.目 录陈一. ...

最新文章

  1. 用Python连接MySQL并进行CRUD
  2. PHPJavaScript笔记-后端利用Refresh头带错误信息给前端(野路子操作)
  3. 统计字符数(信息学奥赛一本通-T1187)
  4. 第二章--电商设计表-商品模块--mysql电商项目设计
  5. JAVA只要掌握内部类,多继承和单继承都不是问题
  6. .net 手机问卷 源码_当.Net成为大厂门槛代码小白该何去何从?
  7. Python模块 - itertools循环器模块
  8. abaqus汉化后有结果界面中有中文乱码
  9. 测试创新——用户体验测试(UAT)
  10. 微信查询四六级成绩代码
  11. android9.0+wifi叹号,手机wifi连上有个感叹号怎么解决_wifi已连接但有感叹号的处理方法-系统城...
  12. 待忧伤开满山岗,等青春散场
  13. 手机上怎么录制斗鱼直播视频,直播视频怎么录制
  14. 无限法则服务器错误代码,电脑打个无限法则没事儿重启,看系统管理器。提示如图错误代码,发现看不懂...
  15. qbo web接口分析
  16. 苹果x电池容量_关于苹果18W PD快充你想知道的,全都在这里了
  17. es统计mysql 报表_用Elasticsearch实现统计排行榜
  18. 指南解读:急性心力衰竭中国急诊管理指南(2022)
  19. 记录农行H5开户流程
  20. 劳动仲裁成功的几率大吗?

热门文章

  1. 正确理解Linux的“多用户、多任务、多线程”
  2. Qt源码重新编译QtMultimedia模块解决XP播放视频问题
  3. WorkManager 流程分析和源码解析 | 开发者说·DTalk
  4. JS高级---argument详解(一看机会)
  5. jabber协议概述
  6. 在线Excel项目到底有多刺激
  7. 新手达梦数据库碰到的常见问题
  8. 线程安全 voliate
  9. 《从0开始学大数据》之如何自己开发一个大数据SQL引擎
  10. Web前端:面向Web开发人员的顶级JavaScript开发工具和IDE