分析:上面的伪代码有些不易读懂,我写的代码稍微修改了一下,原理是一样的.
//合并两个已排序的数组
#include <stdio.h>
#include <malloc.h>
void MERGE(int *num,int low,int mid,int high,int length);
int main(void)
{
int numA[] = {2,3,66,7,11,13,45,57};
int lenA = (int)sizeof(numA)/sizeof(int),i=0;//获得numA长度
MERGE(numA,0,2,lenA-1,lenA);
for(i=0;i<lenA;i++)
printf("%d ",numA[i]);
return 0;
}
void MERGE(int *num,int low,int mid,int high,int length)
{
int *tmp;
int i = low,j = mid+1,k = 0;
tmp = (int *)malloc(sizeof(int)*length); //根据num数组长度,分配空间
while(i<=mid&&j<=high)
{
if(num[i]<num[j]) tmp[k++] = num[i++];
else tmp[k++] = num[j++];
}
while(i<=mid) tmp[k++] = num[i++];
while(j<=high) tmp[k++] = num[j++];
for(i=0;i<length;i++)
{
num[i] = tmp[i];
}
}