请教两个数组怎么样互补的问题
假设:
int a[]={1,3,5,7,9};
int b[]={2,4,6,8};
要求:
不能将两个数组合并后再分别复制到两个数组中.
结果:
a[]={1,2,3,4,5,6,7,8,9};
b[]={1,2,3,4,5,6,7,8,9};
请达人指教.
[解决办法]
按这种声明不可能,因为ab的空间不够
[解决办法]
插入排序
[解决办法]
不能将两个数组合并后再分别复制到两个数组中?
空间够就先合并再排序不是蛮好吗
[解决办法]
//比较基础的,没有怎么测试,有错的话,自己改一下,#include <iostream>using namespace std;int main(){ int a[]={1,3,5,7,9}; int b[]={2,4,6,8}; int dest[9], count=0, i; for (i=0; i<5; i++) { dest[i]=a[i]; } count=i; for (int j=0; j<4; j++) { int k; for (k=0; k<count; k++) { if(dest[k]==b[j]) break; } if(k==count) //没有找到相同的元素, { dest[count]=b[j]; count++; } } for (int k=0; k<count; k++) cout<<dest[k]<<endl; return 0;}
[解决办法]
有解决办法:
空间问题:
栈中数据是从高低址到低地址连续存储的,所以只要定义一个指针c:
int * c = b;[注:因为b是后定义的,所以在高地址]
这样c就相当于一个新的数组{2,4,6,8,1,3,5,7}
排序问题:
原地按间隔将a插入b:
i从0开始迭代,直到i = sizeof a;
1 将a[i]取出,存入tmp
2 将b[2*i]及后面的元素后移一个元素,再将tmp插入b[2*i]:c变为{1,2,4,6,8,3,5,7}
3 i++;
迭代结束,将c的地址付给a,b
[解决办法]
看不懂题目,汗。。。
因为开始的数组a只有4个int元素,现在合并后想存储8个元素,可以另写算法扩展,但是这个新的能存储8个int元素的数组就已经不是以前那个数组a 了。。。
[解决办法]
mark一个,呵呵