实现二路归并排序算法
来源:互联网 发布:淘淘商城项目完整源码 编辑:程序博客网 时间:2024/06/05 08:35
/*exp11-7.cpp*/
#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)/*在第1段中的记录放入R1中*/
if(R[i].key<=R[j].key)/*将第1段中的记录放入R1中*/
{
R1[k]=R[i];
i++;k++;
}
else/*将第2段中记录放入R1中*/
{
R1[k]=R[j];
j++;k++;
}
while(i<=mid)/*将第1段余下部分复制到R1*/
{
R1[k]=R[i];
i++;j++;
}
while(j<=high)/*将第2段余下部分复制到R1*/
{
R1[k]=R[j];
j++;k++;
}
for(k=0,i=low;i<=high;k++,i++)/*将R1复制回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)/*余下两个子表,后者长度小于length*/
Merge(R,i,i+length-1,n-1);/*归并这两个子表*/
}
void MergeSort(RecType R[],int n)/*二路归并排序算法*/
{
int length,k,i=1;/*i用于累计归并的趟数*/
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");
}
}
void main()
{
int i,k,n=8;
KeyType a[]={18,2,20,34,12,32,6,16};
RecType R[MAXE];
for(i=0;i<n;i++)
R[i].key=a[i];
printf("\n");
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");
}
- 实现二路归并排序算法
- 插入排序算法&二路归并排序算法java实现
- python实现排序算法二:归并排序
- 二路归并排序算法
- 二路归并排序算法
- 二路归并排序算法
- 二路归并排序算法实现-完整C语言程序
- 二路归并排序实现
- 常见的五类排序算法图解和实现(归并类:二路归并排序)
- 两种归并排序算法的实现:二路归并排序和基本归并排序(虚拟消除递归的二路归并排序)
- 排序算法之二路归并排序
- 排序算法之二路归并排序
- 排序算法之二路归并排序
- 排序算法之二路归并排序
- 排序算法之Java实现4——二路归并排序算法
- JAVA实现排序算法(二):两种归并排序
- 【数据结构与算法】二路归并排序
- 经典算法之二路归并排序
- linux0.11调试教程,写了个readinode,参数i节点号,返回磁盘i节点到文件inodexxxx
- JDK的动态代理机制
- 28.整数的二进制表示中1的个数
- 《远控编程笔记》第七天
- PL/SQL批处理语句:BULK COLLECT 和 FORALL对优化的贡献
- 实现二路归并排序算法
- GetHostbyName函数用法
- 使用pycurl进行web提交
- 《虚拟化、云计算、开放源代码及其他》讲述虚拟化与IaaS
- NetBeans所用的jdk目录配置
- NSSearchPathForDirectoriesInDomains
- [gpu pro]《狂野西部:生死同盟》的渲染技术
- 点评阿里云盛大云代表的云计算IaaS产业
- grep && and ||