如何使用指针合并 2 个数组

How to merge 2 arrays using pointers?

本文关键字:数组 合并 何使用 指针      更新时间:2023-10-16

我正在制作一个程序来合并和排序 2 个数组。我正在使用函数"合并"来执行此操作。算法必须是内联的 - 操作计数应与 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)/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){}
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++);
}

实时代码