数组有序子序列的合并问题
问题描述:一个数组存在前后两个子序列,并且每个子序列都是有序的,两个子序列的分界处为n.实现对该数组两个子序列合并并进行从小到大的排序。
样例输入:数组[1,5,6,7,9,2,4,8,10,13,14],分界处n=5,
样例输出:[1,2,4,5,6,7,8,9,10,13,14]
一种实现方式如下(Java版):
1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 /** 5 * 实现对一个数组中两个子有序段进行合并 6 * 例如:序列{1,5,6,7,9,2,4,8,10,13,14},合并后序列为{1,2,4,5,6,7,8,9,10,13,14} 7 * @author JiaJoa 8 * 9 */ 10 public class Algorithm_Main { 11 12 public static void main(String[] args) { 13 Scanner in = new Scanner(System.in); 14 String str = in.nextLine(); //输入数组的序列 15 String[] nums = str.split(","); 16 int[] num = new int[nums.length]; 17 for(int i=0;i<nums.length;i++) 18 num[i] = Integer.parseInt(nums[i]); 19 int n = in.nextInt(); //输入子序列分界点位置 20 getResult(num,n); 21 System.out.println(Arrays.toString(num)); //打印合并的序列 22 in.close(); 23 } 24 25 //子序列合并 26 public static void getResult(int[] num,int n){ 27 for(int i=0;i<n;i++){ 28 if(num[n]<num[i]){ 29 int temp = num[n]; 30 num[n] = num[i]; 31 num[i] = temp; 32 sort(num,i); //保证第二个子序列重新有序 33 } 34 } 35 } 36 37 //对第二个子序列重新排序以保证其有序性 38 public static void sort(int[] num,int i){ 39 for(int j=i;j<num.length-1;j++){ 40 if(num[j+1]<num[j]){ 41 int temp = num[j+1]; 42 num[j+1] = num[j]; 43 num[j] = temp; 44 } 45 } 46 } 47 }