本节介绍一种不同于插入排序和归并排序,其排序的实现思想是先将所有的记录完全分开,然后两两合并,在合并的过程中将其排好序,最终能够得到一个完整的有序表。

例如对于含有 n 个记录的无序表,首先默认表中每个记录各为一个有序表(只不过表的长度都为 1),然后进行两两合并,使 n 个有序表变为 ⌈n/2⌉ 个长度为 2 或者 1 的有序表(例如 4 个小有序表合并为 2 个大的有序表),通过不断地进行两两合并,直到得到一个长度为 n 的有序表为止。这种归并排序方法称为:2-路归并排序。

例如对无序表{49,38,65,97,76,13,27}进行 2-路归并排序的过程如

图 1 归并排序过程

归并过程中,每次得到的新的子表本身有序,所以最终得到的为有序表。

2-路归并排序的具体实现代码为(采用了递归的思想):

#include

#include

#define MAX 8

typedef struct{

int key;

}SqNode;

typedef struct{

SqNode r[MAX];

int length;

}SqList;

//SR中的记录分成两部分:下标从 i 至 m 有序,从 m+1 至 n 也有序,此函数的功能是合二为一至TR

运行结果为:

13 27 38 49 65 76 97

提示:归并排序算法在具体实现时,首先需要将整个记录表进行折半分解,直到分解为一个记录作为单独的一张表为止,然后在进行两两合并。整个过程为分而后立的过程。

总结

归并排序算法的O(nlogn)。该算法相比于堆排序和快速排序,其主要的优点是:当记录表中含有值相同的记录时,排序前和排序后在表中的相对位置不会改变。

例如,在记录表中记录 a 在记录 b 的前面(记录 a 和 b 的关键字的值相等),使用归并排序之后记录 a 还在记录 b 的前面。这就体现出了该排序算法的稳定性。而堆排序和快速排序都是不稳定的。

归并排序c语言实验报告,归并排序算法及其C语言具体实现相关推荐

  1. 大一c语言实验报告运行结果,大一c语言实验报告

    篇一:大一上期C语言实验报告3 基本输入输出 成都工业学院·计算机工程学院 <程序设计基础>实验报告 1. 实验目的 (1) 熟练掌握scanf()/printf()库函数的调用格式,正确 ...

  2. 天津理工大学c语言实验报告8,天津理工大学-c语言上机报告4.doc

    天津理工大学-c语言上机报告4.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3 ...

  3. 大学c语言实验报告,上海工程技术大学C语言实验报告.doc

    上海工程技术大学C语言实验报告.doc 实 验 报 告高级语言程序设计20122013学年第 一 学期学院(部)管理学院指导教师李旭芳班级代号姓名/学号同组人无实验一一实验项目名称程序流程控制分别求1 ...

  4. c语言实验报告上理答案,C语言实验报告江西理工大学实验5

    <C语言实验报告江西理工大学实验5>由会员分享,可在线阅读,更多相关<C语言实验报告江西理工大学实验5(6页珍藏版)>请在读根文库上搜索. 1.C语言程序设计实验报告教学班级: ...

  5. 大一上期c语言实验报告2,大一上期C语言实验报告1熟悉实验环境

    <大一上期C语言实验报告1熟悉实验环境>由会员分享,可在线阅读,更多相关<大一上期C语言实验报告1熟悉实验环境(3页珍藏版)>请在人人文库网上搜索. 1.成都工业学院计算机工程 ...

  6. 湖北理工学院c语言实验报告答案,湖北理工学院c语言实验报告七答案.doc

    湖北理工学院c语言实验报告七答案.doc 实验七 结构体和共用体实验课程名高级语言程序设计(C)专业班级 学号 姓名 实验时间 实验地点 指导教师 一.实验目的和要求1. 掌握结构体类型变量的定义和使 ...

  7. c语言实验报告大作业答案,C语言实验报告摘要(共6篇)

    C语言实验报告摘要(共6篇) 第一部分: C语言实验经验 C语言实验经验 随着科学技术的飞速发展,计算机在人们中的作用越来越突出. C语言作为一种计算机语言,对其进行学习将有助于我们更好地理解计算机并 ...

  8. 厦门理工C语言实验报告8,厦门理工c语言数据结构实验

    <厦门理工c语言数据结构实验>由会员分享,可在线阅读,更多相关<厦门理工c语言数据结构实验(15页珍藏版)>请在人人文库网上搜索. 1.数据结构实验报告 实验序号:6 实验项目 ...

  9. 南工程c语言实验报告,Linux环境下-C语言编程实验报告(1)(总4页).doc

    Linux环境下-C语言编程实验报告(1)(总4页).doc 西 安 邮 电 大 学 (计算机学院)课内实验报告实验名称 Linux环境下 C语言编程 专业名称 网络工程班 级 1203班 学生姓名 ...

最新文章

  1. mysql5.7数据库快照_lvm快照备份数据库(Mysql5.7)
  2. 【C语言】简单C编程题-同位相同的N项之和/标准输入花括号成对判断/行号行输出...
  3. FeResPost 4.1.8 发布
  4. struct 与class 的区别?
  5. 小爱同学app安卓版_这一届的小爱Play,居然连喵都敢撩……
  6. 无监督学习 k-means_监督学习-它意味着什么?
  7. 读《持续交付2.0》
  8. 一款非常好看的雷姆背景的时间单页(附雷姆图片)
  9. Best Time to Buy and Sell Stock III O(n) 求解方法
  10. proxytable代理不生效_深圳劳动纠纷律师为你解答劳动合同没有盖章是否生效
  11. [Leetcode] Reorder List
  12. 国内车联网行业 2015年发展趋势
  13. java dao接口_java web项目中dao和service前面为什么要有接口呢??
  14. 全网首发:SHELL多个判断条件,不会短路
  15. 【笔记】gradle命令行运行任务如何设置代理模式
  16. Git客户端精简版Git-2.10.0-32-bit.exe
  17. IE下载xlsx、docx、pptx文件时自动变成zip文件问题
  18. 硬件信息修改工具 支持修改机器码 硬盘 MAC 等信息
  19. 网站丨平淡的生活里增添一点幸福感
  20. 别有幽愁暗恨生,此时无声胜有声——python循环结构

热门文章

  1. SQL如何分析用户复购?(复购率、表连接)
  2. 中断、信号、锁、信号量
  3. 购买二手车 要提前做好的“功课”
  4. PHP写portal认证服务器,搭建自己的wifidog认证服务器
  5. DDD 系列(一)Domain Primitive
  6. 移动**21*设置无法接通_手机暂时无法接通是什么原因
  7. vue中key的作用及案例
  8. 金蝶kis记账王云盘版怎么安装与注册
  9. Linux日志分析与安全
  10. Camera快门声音去除