知识准备
将多个有序表整合成一个有序表
思路:开始两个两个元素进行比较形成新的子表,然后含有两个元素的子表于另一个子表进行比较,形成四个元素的子表,以此类推,最终形成只有两个子表,再归并,形成有序序列。
#include <stdio.h>
#include <stdlib.h>
#define n 7
int *temp=(int*)malloc(n*sizeof(int));
void MergeSortEle(int Ele[],int low,int high);
void Merge(int Ele[],int low,int mid,int high);
int main ()
{
int i;
int date[]={49,38,65,97,76,13,27};
int len=sizeof(date)/sizeof(date[0]);
MergeSortEle(date,0,len-1);
for(i=0;i<len;i++)
{
// printf("%d\n",date[i]);
}
return 0;
}
void MergeSortEle(int Ele[],int low,int high)
{
int mid;
if(low<high)
{
mid=(low+high)/2;
MergeSortEle(Ele,low,mid);
MergeSortEle(Ele,mid+1,high);
Merge(Ele,low,mid,high);
}
}
void Merge(int Ele[],int low,int mid,int high)
{
//存放在一个子数组中temp,进行中转
int k,m;
for(k=low;k<=high;k++)
{
temp[k]=Ele[k];
printf("-%d",Ele[k]);
}
printf("\n");
//进行归并排序
int i,j,l;
for(i=low,j=mid+1,l=i;i<=mid&&j<=high;l++)
{
if(temp[i]<=temp[j])
{
Ele[l]=temp[i++];
}else
{
Ele[l]=temp[j++];
}
}
while(i<=mid)Ele[l++]=temp[i++];
while(j<=high)Ele[l++]=temp[j++];
for(m=0;m<=high;m++)
{
printf("$%d",Ele[m]);
}
printf("\n");
}
归并过程:
手动递归过程: