数组有序子序列的合并问题

问题描述:一个数组存在前后两个子序列,并且每个子序列都是有序的,两个子序列的分界处为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 }

 

posted @ 2017-11-09 15:55  JiaJoa  阅读(699)  评论(0编辑  收藏  举报