实现一个 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; } }//说好的两个数组是从小到大排列的为什么测试案例是从大到小排列= =我是按照从小到大的排列来写的