【剑指offer】合并有序数组_04.1

#include<iostream.h>
#include <stdio.h>

//有两个排序的数组a1和a2,内存在a1的末尾有足够多的剩余空间容纳a2
//实现一个函数将a2中所有的数字插入到a1,并写所有的数字是排序的。

//自己写的,用例不多,还需进一步测试
void Merge(int array1[],int array2[],int length,int i,int j)
{
	if(array1==NULL || array2==NULL || length <=0)
		return;


	//判断总长度
    int newlength=i+j;
	if(newlength>length)
		return;

	int k=newlength-1;
	i--;
	j--;

	while(i>=0 && j>=0 && k>=i)
	{
		if(array1[i]>array2[j])
		{
			array1[k]=array1[i];
			k--;
			i--;
		}
		else
		{
			array1[k]=array2[j];
			k--;
			j--;
		}
	}
	if(i>=0)
	{
		while(i>=0)
		{
			array1[k--]=array1[i--];
		}
	}
	if(j>=0)
	{
		while(j>=0)
		{
			array1[k--]=array2[j--];
		}
	}
}
//判断两个数组是否相同
//===测试用例====
bool isSame(int a[], int b[], int i, int j)
{
	if(i!=j)
		return false;
	if(a==NULL || b==NULL)
		return false;
	
	for(int k=0;k<i;k++)
	{
		if(a[k]!=b[k])
			return false; 
	}
	return true;
}
void Test(char * testName,int array1[], int array2[], int length, int i,int j,int expected[], int k)
{
	if(testName!=NULL)
		printf("%s begins: \n",testName);

	Merge(array1,array2,length,i,j);
    for(int h=0; h<k; h++)
		cout<<expected[h];
	cout<<endl;
	
	int newlength=i+j;
	for( h=0; h<newlength; h++)
		cout<<array1[h];
	cout<<endl;


    if(isSame(array1,expected,i+j,k))
		printf("passed.\n");
	else
		printf("failed.\n");

}

void Test1()
{
	int array1[20]={1,3,5};
	int array2[]={2,4,6};
	int expected[]={1,2,3,4,5,6};
	Test("Test1", array1, array2, 20, 3, 3, expected, 6);
}
void Test2()
{
	int array1[20]={1,2,3};
	int array2[]={4,5,6};
	int expected[]={1,2,3,4,5,6};
	Test("Test2", array1, array2, 20, 3, 3, expected, 6);
}
void Test3()
{
	int array1[20]={0};
	int array2[]={1,2,3};
	int expected[]={1,2,3};
	Test("Test3", array1, array2, 20, 0, 3, expected, 3);
}
void Test4()
{
	int array1[20]={1,2,3};
	int array2[]={0};
	int expected[]={1,2,3};
	Test("Test4", array1, array2, 20, 3, 0, expected, 3);
}
void Test5()
{
	int array1[20]={0};
	int array2[]={0};//有一个元素为0,但定义的长度为0
	int expected[]={0};// int expected[];编译通不过,必须制定数组长度;int expected[]={}这样也有问题

	//int (*p)[1]=&expected;//数组指针,p指向含有一个元素的数组,定义的时候1必须要有
    //int * p[1];//指针数组,含有一个元素,元素的类型为指针

	Test("Test5", array1, array2, 20, 0, 0, expected, 0);
}

void main()
{
	Test1();
	cout<<"==========="<<endl;
	Test2();
    cout<<"==========="<<endl;
	Test3();
	cout<<"==========="<<endl;
	Test4();
    cout<<"==========="<<endl;
	Test5();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值