【剑指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(); }
相关文章推荐
- 剑指Offer_4Extra_合并两个有序数组
- 剑指offer面试题4:替换空格和合并两个有序数组
- 剑指offer面试题4拓展——已排序数组的合并
- 【剑指offer】之合并两有序单链表
- 【剑指offer】合并两有序单链表
- 剑指Offer-17-合并有序链表
- 剑指offer面试题java实现之题4之相关题目:两个排序数组合并
- 剑指Offer——有序链表的合并
- 剑指Offer---面试题17:合并两个有序链表
- 【剑指offer】合并两个有序的链表
- 剑指OFFER之合并有序链表(九度OJ1519)
- 剑指offer面试题-合并两个有序链表
- 剑指offer-----合并两个排序的数组
- 3.剑指offer-合并两个有序的链表
- 【剑指Offer-知识迁移能力】有序数组中和为S的两个数字
- 【面试题】剑指Offer-17-合并两个有序的单链表
- 数据结构-剑指offer-合并有序链表
- 剑指offer--递归非递归合并两个有序链表
- 剑指offer----合并两个有序链表
- 二维有序数组中的查找 剑指offer 01