c++实现合并两个无序数组并以从大到小的顺序排序

今天做了一下途游游戏的线上笔试题,题目中有一个是合并两个无序数组并排序(从大到小),在这里写一下我的思路,如果有更简单思路的大神请给我留言。
我首先想到的一个思路就是把A和B先放在同一个数组里,在随便用一个排序算法对新数组进行排序,这个方法时间复杂度和空间复杂度应该很高,属于暴力解法,给出代码。

#include<iostream>
using namespace std;
void quick_sort(int *arr,int left,int right)//快速排序算法
{
    int ltemp=left,rtemp=right;
    int f=arr[(left+right)/2];
    while(ltemp<rtemp){
        while(arr[ltemp]>f) ltemp++;
        while(arr[rtemp]<f) rtemp--;
        if(ltemp<rtemp){
            int temp =arr[ltemp];
            arr[ltemp]=arr[rtemp];
            arr[rtemp]=temp;
            ltemp++;
            rtemp--;
        }
    }
    if(ltemp==rtemp){
        ltemp++;
    }
    if(left<rtemp){
        quick_sort(arr,left,ltemp-1);
    }
    if(ltemp<right){
        quick_sort(arr,rtemp+1,right);
    }

}
void sort(int a[],int b[],int lena,int lenb)
{
    int* c=new int[lena+lenb];//new一个新的数组,数组中元素的个数是两个数组之和
    for(int i=0;i<lena;i++){//把两个数组全部放到新建的数组中
        c[i]=a[i];
    }
    for(int i=0;i<lenb;i++){
        c[lena+i]=b[i];
    }
    quick_sort(c,0,lena+lenb-1);//对数组进行快速排序
    for(int i=0;i<lena+lenb;i++){//打印数组
        cout<<c[i]<<" ";
    }
    delete []c;
}
int main(){
    int a[2]={5,3};
    int b[4]={6,1,8,4};
    sort(a,b,2,4);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/fightingPPX/article/details/83350386