【Algorithm】合并两个有序的子数组

时间:2022-09-03 12:02:47
#include<iostream.h>
void merge(int array[],int p,int q,int r,int m);
void print(int array[],int n);
//void sort_merge();
void main()
{
int arr[15]=
{
2,1,3,14,25,
4,11,15,22,24,
6,10,17,20,30
};
merge(arr,1,4,9,9);
print(arr,15);
}
/****************************************************************
*输入:整数数组array[],下标p,q,r,元素个数m。array[p]~array[q]
* 及array[q+1]~array[r]已按递增顺序排序
*输出:按递增排序的子数组array[p]~array[r]
*****************************************************************/
void merge(int array[],int p,int q,int r,int m)
{
int* bp=new int[m];
int i,j,k;
i=p;j=q+1;k=0;
//逐一判断两子数组的元素,按两种情况,把小的元素复制到缓冲区
while(i<=q&&j<=r)
{
if(array[i]<=array[j])
{
bp[k++]=array[i++];
}
else
{
bp[k++]=array[j++];
}
}
//cout<<endl;
//按两种情况处理剩余元素
if(i==q+1)
{
//for(;j<=r;)
while(j<=r)
{
bp[k++]=array[j++];//把array[j]~array[r]复制到缓冲区
}
}
else
{
while(i<=q)
{
bp[k++]=array[i++];//把array[i]~array[q]复制到缓冲区
}

}

k=0;
i=p;
while(i<=r)
//for(i=p;i<=r;)//最后把数组bp的内容复制到array[p]~array[r]
{
array[i++]=bp[k++];
}

delete bp;
}
void print(int array[],int n)
{
for(int i=0;i<n;i++)
{
if(i%5==0&&i!=0)
{
cout<<"\n";
}
cout<<array[i]<<" ";
}
cout<<endl;
}

运行结果:

【Algorithm】合并两个有序的子数组