合并已经排序的两个数组,合并后也需要排序

#include<iostream>
using namespace std;

//将B数组合并到A数组中
void mergeArray(int a[],int alen,int b[],int blen)
{
    int len = alen + blen-1;
    alen--;
    blen--;
    while (alen >= 0 && blen >= 0) {
        if (a[alen] > b[blen]) {
            a[len--] = a[alen--];
        }
        else{
            a[len--] = b[blen--];
        }
    }

    while (blen >= 0) {//原A数组的最小一个数已经排完,将B数组剩余的数复制到A数组前面
        a[len--] = b[blen--];
    }
}

//将A数组和B数组放到C数组中
void mergeArrayToOtherArray(int a[],int alen,int b[], int blen, int c[])
{
    int i = alen;
    int j = blen;
    int k = alen + blen;

    i--;
    j--;
    k--;

    while (i >= 0 && j >= 0) {
        if (a[i] > b[j]) {
            c[k--] = a[i--];
        }
        else{
            c[k--] = b[j--];
        }
    }
    while (j >= 0) {//已经将A数组排完了,将B数组复制到C数组中
        c[k--] = b[j--];
    }

    while (i >= 0) {//已经将B数组排完了,将A数组复制到C数组中
        c[k--] = a[i--];
    }
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int array1[10] = {2, 4, 6, 8, 10};
        int array2[5] = {1, 3, 5, 7, 9};
        mergeArray(array1, 5, array2, 5);

        for (auto i : array1) {
            cout<< i <<" ";
        }
        cout << "\n";

        int array3[5] = {2, 4, 6, 8, 11};
        int array4[5] = {3, 3, 5, 7, 20};
        int array5[10];
        mergeArrayToOtherArray(array3, 5, array4, 5, array5);

        for (auto i : array5) {
            cout<< i << " ";
        }
        cout << "\n";
    }
    return 0;
}
点赞