//实现二路归并排序算法#include<stdio.h>
#include<malloc.h>
#define MAXE 20  //线性表中最多元素个数typedef int KeyType;
typedef char InfoType[10];typedef struct //记录类型
{KeyType key;//关键字项InfoType data;   //其他数据项,类型为InfoType
}RecType;void Merge(RecType r[],int low,int mid,int high)//按递增有序进行直接插入排序
{//将两个有序表r[low..mid],r[mid+1..high]归并为一个有序表r[low...high]RecType *r1;int i=low,j=mid+1,k=0;//k是r1的下标,i,j分别为第1、2段的下标r1=(RecType *)malloc((high-low+1)*sizeof(RecType));//动态分配空间while(i<=mid &&j<=high)//在第一段、第二段均未扫描完时循环if(r[i].key<=r[j].key)//将第一段中的记录放入r1中{r1[k]=r[i];i++;k++;}else//将第二段中的记录放入r1中{r1[k]=r[j];j++;k++;}while(i<=mid) //将第一段余下部分复制到r1{r1[k]=r[i];i++;k++;}while(j<=high)//将第二段余下部分复制到r1{r1[k]=r[j];j++;k++;}for(k=0,i=low;i<=high;k++,i++)//将第二段余下部分复制到r中r[i]=r1[k];
}void MergePass(RecType r[],int length,int n)//实现一趟归并
{int i;for(i=0;i+2*length-1<n;i=i+2*length)//归并length长的相邻子表Merge(r,i,i+length-1,i+2*length-1);if(i+length-1<n)//余下两个子表,后者长度小于lengthMerge(r,i,i+length-1,n-1);//归并这两个子表
}void MergeSort(RecType r[],int n)//二路归并排序算法
{//i用于累计归并的趟数int length,k,i=1;for(length=1;length<n;length=2*length){MergePass(r,length,n);printf(" 第%d趟归并: ",i++);//输出每一趟的排序结果for(k=0;k<n;k++)printf("%4d",r[k].key);printf("\n");}
}int main()
{int i,k,n;KeyType a[]={88,78,68,58,48,38,27,16,15,14,13,12,11,10};n=sizeof(a)/4;RecType r[MAXE];for(i=0;i<n;i++)r[i].key=a[i];printf("初始关键字:");//输出初始化关键字for(k=0;k<n;k++)printf("%4d",r[k].key);printf("\n");MergeSort(r,n);printf("   最后结果:");//输出最后关键字序列for(k=0;k<n;k++)printf("%4d",r[k].key);printf("\n\n");return 0;
}

数据结构源码笔记(C语言描述)汇总:

数据结构源码笔记(C语言):英文单词按字典序排序的基数排序

数据结构源码笔记(C语言):直接插入排序

数据结构源码笔记(C语言):直接选择排序

数据结构源码笔记(C语言):置换-选择算法

数据结构源码笔记(C语言):Huffman树字符编码

数据结构源码笔记(C语言):Josephus问题之顺序表

数据结构源码笔记(C语言):Josephus问题之循环链接表

数据结构源码笔记(C语言):多项式合并

数据结构源码笔记(C语言):二叉树之叶子结点旋转销毁

数据结构源码笔记(C语言):哈夫曼树

数据结构源码笔记(C语言):集合的位向量表示

数据结构源码笔记(C语言):链接队列

数据结构源码笔记(C语言):链接栈

数据结构源码笔记(C语言):线性表的单链表示

数据结构源码笔记(C语言):线性表的顺序表示

数据结构源码笔记(C语言):栈的基本操作

数据结构源码笔记(C语言):中缀表达式

数据结构源码笔记(C语言):希尔插入排序

数据结构源码笔记(C语言):索引文件建立和查找

数据结构源码笔记(C语言):冒泡排序

数据结构源码笔记(C语言):快速排序

数据结构源码笔记(C语言):可变长度字符串的快速排序

数据结构源码笔记(C语言):基数排序

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

数据结构源码笔记(C语言):堆排序

数据结构源码笔记(C语言):二叉树搜索树Kruskal

数据结构源码笔记(C语言):二叉搜索树Prim

数据结构源码笔记(C语言):最短路径弗洛伊德算法

数据结构源码笔记(C语言):深度、广度优先生成树

数据结构源码笔记(C语言):邻接矩阵转化邻接表

数据结构源码笔记(C语言):统计字符串中出现的字符及其次数

数据结构源码笔记(C语言):顺序查找

数据结构源码笔记(C语言):哈希表的相关运算算法

数据结构源码笔记(C语言):分块法查找

数据结构源码笔记(C语言):二分查找

数据结构源码笔记(C语言):二叉树遍历

数据结构源码笔记(C语言):二叉平衡树的相关操作算法

数据结构源码笔记(C语言):二叉排序树的基本操作算法

数据结构源码笔记(C语言):B树的相关运算算法

数据结构源码笔记(C语言):二路归并排序相关推荐

  1. 数据结构源码笔记(C语言描述)汇总

    数据结构源码笔记(C语言):英文单词按字典序排序的基数排序 数据结构源码笔记(C语言):直接插入排序 数据结构源码笔记(C语言):直接选择排序 数据结构源码笔记(C语言):置换-选择算法 数据结构源码 ...

  2. 数据结构源码笔记(C语言):英文单词按字典序排序的基数排序

    //实现英文单词按字典序排序的基数排序算法#include<stdio.h> #include<malloc.h> #include<string.h>#defin ...

  3. 数据结构源码笔记(C语言):索引文件建立和查找

    //实现索引文件建立和查找算法#include<stdio.h> #include<malloc.h> #include<string.h> #include< ...

  4. 数据结构源码笔记(C语言):快速排序

    //实现快速排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...

  5. 数据结构源码笔记(C语言):冒泡排序

    //冒泡排序算法实现 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...

  6. 数据结构源码笔记(C语言):希尔插入排序

    //实现希尔插入排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; ty ...

  7. 数据结构源码笔记(C语言):直接插入排序

    //实现直接插入排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...

  8. 数据结构源码笔记(C语言):直接选择排序

    //实现直接选择排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...

  9. 数据结构源码笔记(C语言):置换-选择算法

    //实现置换-选择算法#include<stdio.h> #include<malloc.h> #include<string.h> #include<std ...

最新文章

  1. 算法基础知识科普:8大搜索算法之AVL树(中)
  2. 1.3.8 excel for mysql_实时生成并下载大数据量的EXCEL文件,用PHP如何实现
  3. webpack源码阅读——npm脚本运行webpack与命令行输入webpack的区别
  4. Linux shell关系运算
  5. python遍历目录_Python遍历目录的4种方法
  6. python爬虫网络请求超时_Python网络爬虫编写5-使用代理,处理异常和超时
  7. html5增强的页面元素
  8. Selenium alert 弹窗处理
  9. JEECG支付服务窗平台与服务窗接口对接文档
  10. 中源幼儿园收费管理系统 v5.2.8 是什么
  11. js调用qq互联api实现第三方登录
  12. android设置闹钟日期,具有特定日期的Android闹钟设置
  13. 如何让word中清晰的图片无损导出为pdf?
  14. stm32内部基准电压
  15. LR https接口
  16. 什么是等保,为什么企业要做等保服务。
  17. 【python常用小工具】python打印26个英文字母
  18. java中获取项目名的方法
  19. 期权最新高频行情数据
  20. 校招(春招实习 + 秋招)总结感想

热门文章

  1. 设置 mock_【学习】接口测试-使用mock生产随机数据
  2. ubuntu 退出anaconda环境_ubuntu 安装两个Anaconda,并迁移虚拟环境
  3. 福州大学2013java期末试卷_2020-11-04:java里,总体说一下集合框架。
  4. w3wp.exe内存占用过高(网站打不开,应用程序池回收就正常)
  5. Win7 IIS7.5运行ASP时出现500错误的解决办法
  6. C#多态性的小记,父类,子类,虚方法,接口
  7. java selenium后报错Element not found in the cache元素定位要重新赋值之前的定义
  8. MyISAM和InnoDB的索引在实现上的不同
  9. 单调递增最长子序列 - 从最长公共子序列到单调递增最长子序列
  10. px/em/pt区别和转换