数组合并
思路:归并排序就是借用这一算法与分治才达到了nlogn的复杂度,所谓合并就是双指针法,小的就加进去,然后指针跳一个,最后肯定有一个数组的指针还没指到头,遍历一遍就是,很优秀的复杂度o(n+m)
/**
* @Title: d.java
* @Description: TODO
* @author 菱形继承
* @date 2020-03-31 03:28:16
*/
/**
* @ClassName: d
* @Description: TODO
* @author 菱形继承
* @date 2020-03-31 03:28:16
*/
import java.util.*;
public class d {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int len1=sc.nextInt(),len2=sc.nextInt();
int[] list1,list2,list;
list1=new int[len1];list2=new int[len2];list=new int[len1+len2];
for(int i=0;i<len1;i++)list1[i]=sc.nextInt();
for(int i=0;i<len2;i++)list2[i]=sc.nextInt();
list=merge(list1,list2);
for(int i=0;i<len1+len2;i++)
{
System.out.print((i==len1+len2)?list[i]:list[i]+" ");
}
}
public static int[] merge(int []list1,int []list2)
{
int len1=list1.length,len2=list2.length;
int[] list= new int[len1+len2];
int i=0,j=0,cnt=0;
while(i<len1&&j<len2)
{
if(list1[i]<=list2[j])
{
list[cnt++]=list1[i];
i++;
}
else
{
list[cnt++]=list2[j];
j++;
}
}
while(i<len1)
{
list[cnt++]=list1[i];
i++;
}
while(j<len2)
{
list[cnt++]=list2[j];
j++;
}
//System.out.println(cnt);
return list;
}
}
运行结果: