今天做了一下途游游戏的线上笔试题,题目中有一个是合并两个无序数组并排序(从大到小),在这里写一下我的思路,如果有更简单思路的大神请给我留言。
我首先想到的一个思路就是把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;
}