C++ 如何使用指针合并2个数组?
我正在制作一个程序来合并和排序2个数组。我正在使用函数“merge”来完成此操作。算法必须是内联的-运算计数应与dima+dimb成比例。我不能使用助手数组。我如何在不使用外部库的情况下实现这一点?我怀疑我可以使用指针实现这些功能C++ 如何使用指针合并2个数组?,c++,arrays,sorting,C++,Arrays,Sorting,我正在制作一个程序来合并和排序2个数组。我正在使用函数“merge”来完成此操作。算法必须是内联的-运算计数应与dima+dimb成比例。我不能使用助手数组。我如何在不使用外部库的情况下实现这一点?我怀疑我可以使用指针实现这些功能 int a[] = {1,4,4,5,8}; int b[] = {1,2,2,4,6,6,9}; constexpr size_t dima = (sizeof(a)/sizeof(*a)); constexpr size_t dimb = (sizeof(b)/s
int a[] = {1,4,4,5,8};
int b[] = {1,2,2,4,6,6,9};
constexpr size_t dima = (sizeof(a)/sizeof(*a));
constexpr size_t dimb = (sizeof(b)/sizeof(*b));
constexpr size_t dimc = dima + dimb;
int c[dimc];
merge(a,dima,b,dimb,c);
void merge(const int* a, size_t dima, const int* b, size_t dimb, int*
c){}
inta[]={1,4,4,5,8};
int b[]={1,2,2,4,6,6,9};
constexpr size_t dima=(sizeof(a)/sizeof(*a));
constexpr size_t dimb=(sizeof(b)/sizeof(*b));
constexpr size\u t dimc=dima+dimb;
int*c=新的int[dimc];
合并(a、dima、b、dimb、c);
无效合并(常量int*a,大小dima,常量int*b,大小dimb,int*
(c){
int a_t=0;
int b_t=0;
int insert_a=0,insert_b=0;
对于(inti=0;iinta[]={1,4,4,5,8};
int b[]={1,2,2,4,6,6,9};
constexpr size_t dima=(sizeof(a)/sizeof(*a));
constexpr size_t dimb=(sizeof(b)/sizeof(*b));
constexpr size\u t dimc=dima+dimb;
int*c=新的int[dimc];
合并(a、dima、b、dimb、c);
无效合并(常量int*a,大小dima,常量int*b,大小dimb,int*
(c){
int a_t=0;
int b_t=0;
int insert_a=0,insert_b=0;
对于(int i=0;ivoid merge)(常量int*a、大小dima、常量int*b、大小dimb、大小c){
int i=0,j=0,k=0;
而(ivoid合并(常量int*a、大小dima、常量int*b、大小dimb、大小c){
int i=0,j=0,k=0;
而(i 如果(*(a+i)怎么办?我怀疑我不能添加头文件:/in中可能的实现部分怎么办?怎么办?我怀疑我不能添加头文件:/in中可能的实现部分怎么办?它可能会工作,但很抱歉,但我必须说,它非常难看,不可读,请尝试更清楚您的代码。它可能工作,但很抱歉,但我必须说,它是非常难看,无法阅读,请尝试更清楚地使用您的代码
int a[] = {1,4,4,5,8};
int b[] = {1,2,2,4,6,6,9};
constexpr size_t dima = (sizeof(a)/sizeof(*a));
constexpr size_t dimb = (sizeof(b)/sizeof(*b));
constexpr size_t dimc = dima + dimb;
int* c = new int[dimc];
merge(a,dima,b,dimb,c);
void merge(const int* a, size_t dima, const int* b, size_t dimb, int*
c){
int a_t=0;
int b_t=0;
int insert_a=0,insert_b=0;
for(int i=0; i<dima+dimb;i++)
{
insert_a=0;
insert_b=0;
if(a_t < dima)
{
if(b_t < dimb)
{
if(a[a_t] < b[b_t])
{
insert_a=1;
}
else
{
insert_b=1;
}
}
else
{
insert_a=1;
}
}
else
{
insert_b=1;
}
if(insert_a)
{
c[i] = a[a_t++];
}
else if(insert_b)
{
c[i] = b[b_t++];
}
}
}
void merge(const int* a, size_t dima, const int* b, size_t dimb, int* c){
int i = 0, j = 0, k = 0;
while(i < dima && j < dimb){
if(*(a + i) <= *(b + j))
*(c + k++)=*(a + i++);
else *(c + k++)=*(b + j++);
}
while(i < dima)
*(c + k++)=*(a + i++);
while(j < dimb)
*(c + k++)=*(b + j++);
}