您的位置:首页 > Web前端

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

2014-02-28 17:56 134 查看
#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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: