数据结构源码笔记(C语言):二路归并排序
//实现二路归并排序算法#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语言):二路归并排序相关推荐
- 数据结构源码笔记(C语言描述)汇总
数据结构源码笔记(C语言):英文单词按字典序排序的基数排序 数据结构源码笔记(C语言):直接插入排序 数据结构源码笔记(C语言):直接选择排序 数据结构源码笔记(C语言):置换-选择算法 数据结构源码 ...
- 数据结构源码笔记(C语言):英文单词按字典序排序的基数排序
//实现英文单词按字典序排序的基数排序算法#include<stdio.h> #include<malloc.h> #include<string.h>#defin ...
- 数据结构源码笔记(C语言):索引文件建立和查找
//实现索引文件建立和查找算法#include<stdio.h> #include<malloc.h> #include<string.h> #include< ...
- 数据结构源码笔记(C语言):快速排序
//实现快速排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...
- 数据结构源码笔记(C语言):冒泡排序
//冒泡排序算法实现 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...
- 数据结构源码笔记(C语言):希尔插入排序
//实现希尔插入排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; ty ...
- 数据结构源码笔记(C语言):直接插入排序
//实现直接插入排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...
- 数据结构源码笔记(C语言):直接选择排序
//实现直接选择排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...
- 数据结构源码笔记(C语言):置换-选择算法
//实现置换-选择算法#include<stdio.h> #include<malloc.h> #include<string.h> #include<std ...
最新文章
- 算法基础知识科普:8大搜索算法之AVL树(中)
- 1.3.8 excel for mysql_实时生成并下载大数据量的EXCEL文件,用PHP如何实现
- webpack源码阅读——npm脚本运行webpack与命令行输入webpack的区别
- Linux shell关系运算
- python遍历目录_Python遍历目录的4种方法
- python爬虫网络请求超时_Python网络爬虫编写5-使用代理,处理异常和超时
- html5增强的页面元素
- Selenium alert 弹窗处理
- JEECG支付服务窗平台与服务窗接口对接文档
- 中源幼儿园收费管理系统 v5.2.8 是什么
- js调用qq互联api实现第三方登录
- android设置闹钟日期,具有特定日期的Android闹钟设置
- 如何让word中清晰的图片无损导出为pdf?
- stm32内部基准电压
- LR https接口
- 什么是等保,为什么企业要做等保服务。
- 【python常用小工具】python打印26个英文字母
- java中获取项目名的方法
- 期权最新高频行情数据
- 校招(春招实习 + 秋招)总结感想
热门文章
- 设置 mock_【学习】接口测试-使用mock生产随机数据
- ubuntu 退出anaconda环境_ubuntu 安装两个Anaconda,并迁移虚拟环境
- 福州大学2013java期末试卷_2020-11-04:java里,总体说一下集合框架。
- w3wp.exe内存占用过高(网站打不开,应用程序池回收就正常)
- Win7 IIS7.5运行ASP时出现500错误的解决办法
- C#多态性的小记,父类,子类,虚方法,接口
- java selenium后报错Element not found in the cache元素定位要重新赋值之前的定义
- MyISAM和InnoDB的索引在实现上的不同
- 单调递增最长子序列 - 从最长公共子序列到单调递增最长子序列
- px/em/pt区别和转换