永发信息网

将已按照降序排列的两个数组合并到一个数组中

答案:2  悬赏:50  手机版
解决时间 2021-04-05 09:40
  • 提问者网友:wodetian
  • 2021-04-04 23:25
将已按照降序排列的两个数组合并到一个数组中
最佳答案
  • 五星知识达人网友:笑迎怀羞
  • 2021-04-04 23:32
int main(int argc, const charchar * argv[])
{

int str1[5]={55,35,23,4,1};//两个升序数组
int str2[5]={25,22,12,9,3};
int out[10];//输出数组
int i=0,j=0,k=0;
while (i<5&&j<5){//循环将较小元素放入C
if (str1[i]>str2[j]) {
out[k]=str1[i];
i++;
k++;
}
else{
out[k]=str2[j];
j++;
k++;
}
}//while
if(i==5){//第1个数组元素已经全部放到C中,将第2个数组剩余元素全放到C中
while (j<5) {
out[k]=str2[j];
k++;
j++;
}
}
if(j==5){//第2个数组元素已经全部放到C中,将第1个数组剩余元素全放到C中
while (i<5) {
out[k]=str1[i];
k++;
i++;
}

}
for(int i=0;i<10;i++){
printf("%d ",out[i]);

}
}
全部回答
  • 1楼网友:纵马山川剑自提
  • 2021-04-05 00:48

你想用什么语言实现?//C语言
#include 
#include 
#include 
int merge(int* ar1, int len1, int* ar2, int len2, int** rtn){
    int i=0,j=0,k=0;
    int* res = NULL;
    if (ar1 == NULL || ar2 == NULL || rtn == NULL)
        return 0;
    *rtn = (int *)malloc((len1+len2)*sizeof(int));
    if(*rtn == NULL)
        return 0;
    memset(*rtn, 0, (len1+len2)*sizeof(int));
    res = (int*)*rtn;
    int len = (len1+len2);
    while(i    {
        if (ar1[i]>ar2[j]) {
            res[k++] = ar1[i++];
        } else if (ar1[i]==ar2[j]) {
            res[k++] = ar1[i++];
            j++;
            len--;
        } else {
            res[k++] = ar2[j++];
        }
    }
    while(i        res[k++] = ar1[i++];
    }
    while(j        res[k++] = ar2[j++];
    }
    return  len;
}
int merge_test()
{
    int a1[] = {55,35,23,4,1};
    int a2[] = {55,25,22,12,9,3,1};
    int len1 = sizeof(a1)/sizeof(int);
    int len2 = sizeof(a2)/sizeof(int);
    int i = 0, len = 0;
    int* a3 = NULL;
    int* ptr = NULL;
    len = merge(a1, len1, a2, len2, &a3);
    if (a3 == NULL) {
        printf("a3==NULL ");
        return 1;
    }
    ptr = a3;
    while(i        printf("a3[%2d]=%2d ", i++, *ptr++);
    }
    if (a3 != NULL) {
        free(a3);
    }
    return 0;
}
int main(int argc, char* argv[]) {
    merge_test();
    return 0;
}
//Java语言
package com;
public class MergeTest {
static int merge(int[] ar1, int[] ar2, int[] res){
    int i=0,j=0,k=0;
    if (ar1 == null || ar2 == null)
        return 0;
    int len = (ar1.length+ar2.length);
    while(i     {
        if (ar1[i]>ar2[j]) {
            res[k++] = ar1[i++];
        } else if (ar1[i]==ar2[j]) {
            res[k++] = ar1[i++];
            j++;
            len--;
        } else {
            res[k++] = ar2[j++];
        }
    }
    while(i         res[k++] = ar1[i++];
    }
    while(j         res[k++] = ar2[j++];
    }
    return  len;
}
public static void main(String[] args) {
    int a1[] = {55,35,23,4,1};
    int a2[] = {55,25,22,12,9,3,1};
    int a3[] = new int[a1.length + a2.length];
    int len = merge(a1, a2, a3);
    for (int i=0;i      System.out.printf("a3[%2d]=%2d ", i, a3[i]);
    }
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯