您的位置:首页 > 其它

归并之将两个有序数组合并(已测试)

2015-07-23 12:35 288 查看
#include<stdio.h>
#include<stdlib.h>

//归并作用是将两个序列合并 L = 左边起始位置,R = 右边起始位置 RightEnd = 右边终点位置
void Merge(int A[],int TmpA[],int L,int R,int RightEnd)
{
int LeftEnd = R -1;         //左边终点位置 左右两列挨着
int Tmp = L;                //存放结果初始位置
int NumElements = RightEnd - L + 1;       //存放元素总个数
while(L <= LeftEnd && R<= RightEnd)       //当左右两边都存在元素时比较大小将小的哪一个存入数组Tmp中
{
if(A[L] <A[R] )        //如果左边的值小则将左边的元素存入数组中
TmpA[Tmp++] = A[L++];
else                   //反之
TmpA[Tmp++] = A[R++];
}
while(L <= LeftEnd)         //如果左边的数组长一点则将后面的直接存入数组
TmpA[Tmp++] = A[L++];
while(R <= RightEnd)
TmpA[Tmp++] = A[R++];  //反之
for(int i = 0; i < NumElements;i++,RightEnd --)  //用NumElem来控制赋值的次数
A[RightEnd] = TmpA[RightEnd];
}

void main()
{
int a[11] = {1,3,5,7,9,2,4,6,8,10,20};
int b[11] = {0};
Merge(a,b,0,5,9);
for(int i=0;i<11;i++)
{
printf("%d\n",a[i]);
}
getchar();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: