请实现一个函数,功能为合并两个升序数组为一个升序数组
输入的格式是用逗号隔开的数字。
数据范围:输入的字符串长度满足
输入有多个测试用例,每个测试用例有1-2行,每行都是以英文逗号分隔从小到大排列的数字
输出一行以英文逗号分隔从小到大排列的数组
1,5,7,9 2,3,4,6,8,10
1,2,3,4,5,6,7,8,9,10
不允许使用原生的 sort、concat 等函数
import java.util.*; public class Main{ public static void main(String args[]) { Scanner in = new Scanner(System.in); String s1 = in.nextLine(); if (!in.hasNext()) { System.out.println(s1); return; } String s2 = in.nextLine(); String[] ss1 = s1.split(","); String[] ss2 = s2.split(","); int[] a = new int[ss1.length]; int[] b = new int[ss2.length]; for(int i = 0; i < ss1.length; i++) { a[i] = Integer.valueOf(ss1[i]); } for(int i = 0; i < ss2.length; i++) { b[i] = Integer.valueOf(ss2[i]); } int[] res = new Solution().merge(a,b); StringBuilder sb = new StringBuilder(); for(int i = 0; i < res.length; i++) { sb.append(res[i]); if(i < res.length - 1) sb.append(","); } System.out.println(sb.toString()); } } class Solution{ public int[] merge(int[] a, int[] b) { int[] res = new int[a.length + b.length]; int j = 0; for(int i = 0; i < a.length; i++) { res[j] = a[i]; j++; } for(int i = 0; i < b.length; i++) { res[j] = b[i]; j++; } quickSort(res, 0, res.length - 1); return res; } private static void quickSort(int[] a, int left, int right) { int l = left, r = right; if (l < r) { int key = a[left]; while (l < r) { while (l < r && a[r] >= key) r--; if (l < r) a[l++] = a[r]; while (l < r && a[l] < key) l++; if (l < r) a[r--] = a[l]; } a[l] = key; quickSort(a, left + 1, right); quickSort(a, left, right - 1); } } }
import java.util.Scanner; /** * @Date: 2020-04-29 22:25 * @version: 1.0 */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String strs1[] = sc.nextLine().split(","); int arr1[] = new int[strs1.length]; for (int i = 0;i<arr1.length;i++) arr1[i] = Integer.valueOf(strs1[i]); while (sc.hasNextLine()){ String strs2[] = sc.nextLine().split(","); int arr2[] = new int[strs2.length]; for (int j = 0;j<strs2.length;j++) arr2[j] = Integer.valueOf(strs2[j]); arr1 = merge(arr1,arr2); } for (int i=0;i<arr1.length-1;i++) System.out.print(arr1[i]+","); System.out.print(arr1[arr1.length-1]); sc.close(); } private static int[] merge(int[] arr1, int[] arr2) { int arr[] = new int[arr1.length+arr2.length]; int index = 0; int index1=0; int index2=0; while (index1<arr1.length&&index2<arr2.length){ if (arr1[index1]<=arr2[index2]) arr[index++]=arr1[index1++]; else arr[index++]=arr2[index2++]; } while (index1<arr1.length) arr[index++]=arr1[index1++]; while (index2<arr2.length) arr[index++]=arr2[index2++]; return arr; } }
import java.util.*; public class Main{ public static void main(String[] args) { Scanner in = new Scanner(System.in); String s1 = in.nextLine(); if (!in.hasNext()) { System.out.println(s1); return; } String s2 = in.nextLine(); String[] str1 = s1.split(","); String[] str2 = s2.split(","); int[] arrayA = new int[str1.length]; int[] arrayB = new int[str2.length]; for (int i = 0; i < str1.length; i++) { arrayA[i] = Integer.parseInt(str1[i]); } for (int i = 0; i < str2.length; i++) { arrayB[i] = Integer.parseInt(str2[i]); } int[] result = Main.merge(arrayA, arrayB); for(int i = 0 ;i < result.length; i++){ System.out.print(result[i]+(i == result.length - 1 ? "" : ",")); } } public static int[] merge(int[] a, int[] b) { return mergeIndex(a, b, 0, new int[a.length + b.length]); } // 递归合并数组 public static int[] mergeIndex(int[] a, int[] b, int index, int[] result) { if (index >= result.length) { return mergeSort(result); } result[index] = index < a.length ? a[index] : b[index - a.length]; return mergeIndex(a, b, index + 1, result); } // 递归排序 public static int[] mergeSort(int[] res) { return mergeSort(0, 0, res.length + 1, res); } public static int[] mergeSort(int x, int y, int index, int[] res) { if (index < res.length * res.length + res.length) { if (res[y] > res[x]) { res[x] = res[x] ^ res[y]; res[y] = res[x] ^ res[y]; res[x] = res[x] ^ res[y]; } return mergeSort(x = index % res.length == 0 ? ++x : x, index % res.length, index + 1, res); } return res; } }
import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str1 = scanner.next(); if (!scanner.hasNext()) { System.out.println(str1); return; } int[] num1 = strToIntArr(str1); int[] num2 = strToIntArr(scanner.next()); int[] num = new int[num1.length + num2.length]; int index1 = 0, index2 = 0, index = 0; while (index1 < num1.length && index2 < num2.length) { num[index++] = (num1[index1] <= num2[index2]) ? num1[index1++] : num2[index2++]; } while (index1 < num1.length) { num[index++] = num1[index1++]; } while (index2 < num2.length) { num[index++] = num2[index2++]; } for (int i = 0; i < num.length; i++) { if (i == num.length - 1) { System.out.println(num[i]); } else { System.out.print(num[i] + ","); } } } public static int[] strToIntArr(String str) { String[] strNumber = str.split(","); int[] number = new int[strNumber.length]; for (int i = 0; i < strNumber.length; i++) { number[i] = Integer.parseInt(strNumber[i]); } return number; } }