实现一个 mergeArray 函数,对两个已经排好序(从小到大)的数组进行排序(从小到大),数组里面是数字均为整数,在 [0,100000) 之间,数组长度不超过 10000 。
输入数据有三行,第一行两个数字表示每个数组数字个数,后面两行分别表示两个数组
5,3
9,6,5,3,1
7,4,2
输出
1,2,3,4,5,6,7,9
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
/**
* @author: sanjin
* @date: 2019/9/29 15:34
*/
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String s1 = s.nextLine();
int n1 = Integer.parseInt(s1.split(",")[0]);
int n2 = Integer.parseInt(s1.split(",")[1]);
String s2 = s.nextLine();
int[] nums1 = new int[n1];
int[] nums2 = new int[n2];
for (int i = 0; i < nums1.length; i++) {
nums1[i] = Integer.parseInt(s2.split(",")[i]);
}
String s3 = s.nextLine();
for (int i = 0; i < nums2.length; i++) {
nums2[i] = Integer.parseInt(s3.split(",")[i]);
}
if (nums1.length > 1 && nums1[0] > nums1[1]) {
reverse(nums1);
}
if (nums2.length > 1 && nums2[0] > nums2[1]) {
reverse(nums2);
}
int[] ints = mergeArray(nums1, nums2);
System.out.println(Arrays.toString(ints));
}
static void reverse(int[] nums) {
int l = 0, r = nums.length - 1;
while (l < r) {
int t = nums[r];
nums[r] = nums[l];
nums[l] = t;
l++;
r--;
}
}
static int[] mergeArray(int[] n1, int[] n2) {
int p1 = 0, p2 = 0;
if (n1.length == 0) return n2;
if (n2.length == 0) return n1;
int[] res = new int[n1.length + n2.length];
int cur = 0;
while (p1 < n1.length && p2 < n2.length) {
if (n1[p1] < n2[p2]) {
res[cur] = n1[p1];
p1++;
} else {
res[cur] = n2[p2];
p2++;
}
cur++;
}
while (p1 < n1.length) {
res[cur] = n1[p1];
p1++;
cur++;
}
while (p2 < n2.length) {
res[cur] = n2[p2];
p2++;
cur++;
}
return res;
}
}
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[10000],b[10000], r[20000], i,j,k,n,m;
scanf("%d%d", &n, &m);
for (i = 0; i < n; i++){
scanf("%d", &a[i]);
}
for (i = 0; i < m; i++){
scanf("%d", &b[i]);
}
i = j = k = 0;
while(1) {
if (j >= m){
while(i < n){
r[k++] = a[i++];
}
break;
}
if (i >= n){
while(j < m){
r[k++] = b[j++];
}
break;
}
if (a[i] > b[j]){
r[k++] = a[i++];
} else {
r[k++] = b[j++];
}
}
while(k--){
printf("%d", r[k]);
if (k > 0) {
printf(",");
}
}
return 0;
} #include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int M,N,i=0,j=0,k=0;
cin>>M>>N;
int a1[M];
int a2[N];
int a3[M+N];
//输入数据
for(i=0;i<M;i++)
cin>>a1[i];
for(i=0;i<N;i++)
cin>>a2[i];
for(j=0,i=0,k=0;i<M||k<N;i++,j++)
{
if(i<M)
{
a3[j]=a1[i];
}
else
{
a3[j]=a2[k++];
}
}
sort(a3,a3+M+N);
for(i=0;i<(M+N);i++)
cout<<a3[i]<<" ";
return 0;
} import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int l1=s.nextInt();
int l2=s.nextInt();
int[] arr1=new int[l1];
int[] arr2=new int[l2];
for (int i=0;i<l1;i++){
arr1[i]=s.nextInt();
}
for (int i=0;i<l2;i++){
arr2[i]=s.nextInt();
}
int[] arr3=mergeArray(arr1, arr2);
System.out.print(arr3[0]);
for (int i=1;i<arr3.length;i++){
System.out.print(","+arr3[i]);
}
}
public static int[] mergeArray(int[] arr1,int[] arr2){
int len1=arr1.length;//数组1的长度
int len2=arr2.length;//数组2的长度
int[] arr3=new int[len1+len2];//组合的数组
int i1=0,i2=0,i3=0;//数组123的起始标记
while(i1<len1||i2<len2){
int x=0,y=0;
if(i1==len1){
x=Integer.MAX_VALUE;
}else{
x=arr1[i1];
}
if (i2==len2){
y=Integer.MAX_VALUE;
}else{
y=arr2[i2];
}
if (x>y){
arr3[i3]=y;
i2++;
i3++;
}else{
arr3[i3]=x;
i1++;
i3++;
}
}
return arr3;
}
}
//说好的两个数组是从小到大排列的为什么测试案例是从大到小排列= =我是按照从小到大的排列来写的