合併兩個有序陣列,其中有一個陣列長度足夠長,在O(1)的空間複雜度裡進行合併

櫻桃木發表於2020-10-15
#include<bits/stdc++.h>
using namespace std;

void fun(int *a, int *b, int na, int nb, int m){
    int i = na - 1, j = nb -1;
    int k = na + nb - 1;
    while(i >= 0 && j >= 0  && k >= 0){
        if(b[j] > a[i]){
            a[k] = b[j];
            k--;
            j--;
        }
        else{
            a[k] = a[i];
            k--;
            i--;
        }
    }
    while(i >= 0){
        a[k--] = a[i--];
    }
    while(j >= 0){
        a[k--] = b[j--];
    }
}

int main()
{
    int a[10] = {1,5,7,9};
    int b[3] = {2,6,8};
    fun(a, b, 4, 3, 10);
    for(int i = 0;i < 7; ++i){
        cout<<a[i]<<" ";
    }
    return 0;
}

 

相關文章