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

是一种稳定的排序算法。

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

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

代码实现如下:

#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. design principle:java 回调与委派/委托机制
  2. HIGHGUI ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
  3. 【opencv】YUV各种色彩、YUV420sp2RGB
  4. 框架之 hibernate之二
  5. oracle leg函数,032-函数的嵌套与LEGB原则
  6. java POI 写入百万数据到 excel
  7. 浅析JavaScript和PHP中三个等号(===)和两个等号(==)的区别
  8. Express 4.x Node.js的Web框架----《转载》
  9. 497.非重叠矩形中的随机点
  10. 虚拟机安装VMware tools
  11. 动态规划之背包问题——完全背包
  12. 细说背包问题 - 完全背包
  13. 基于java实现的一个电话号码程序,3位,5位,7位,8位,11位
  14. BJ模拟 Different Trips【树上后缀数组】
  15. A. Vasya the Hipster
  16. 主板usb接口全部失灵_主板usb接口全部失灵
  17. 数据结构绪论——什么是数据结构?
  18. 埃森哲面试题(new it)
  19. 识别win10和linux的MBR,Win10下安装ElementaryOS双系统:UEFI和Legacy引导
  20. OMRON欧姆龙PLC如何实现远程上下载程序?

热门文章

  1. 传播正能量-IT的笑傲江湖
  2. python list转换成树形结构_列表数据(包含父节点关系)转化为树形结构
  3. 动态规划算法据序偶原理求解0/1背包问题(C++实现)
  4. 渗透前戏:maltego简介
  5. 感知器算法实现鸢尾花数据的分类
  6. hnu实验七字符串7. 音乐DJ和回响贝斯
  7. CF:208A. Dubstep
  8. 渗透工具-FF火狐浏览器
  9. MyBatis-混合版
  10. idea 安装插件找不到解决