两个有序数组合并为一个有序数组
2010-04-15 09:03
411 查看
突然想到了这个算法,记得以前看过,但是没写,怕自己会写不出这个算法,于是就把它用JAVA写出来,呵呵。
思想:先依次比较两个数组,按照小的就传入新的数组。当这次比较完之后可能有一个数组的长度很长,留下一些数组,然后在新数组的末尾插入即可。
代码:
1 class ArraySort
2 {
3 //两个有序数组的合并函数
4 public static int[] MergeList(int a[],int b[])
5 {
6 int result[];
7 if(checkSort(a) && checkSort(b)) //检查传入的数组是否是有序的
8 {
9 result = new int[a.length+b.length];
10
11 int i=0,j=0,k=0; //i:用于标示a数组 j:用来标示b数组 k:用来标示传入的数组
12
13 while(i<a.length && j<b.length)
14 if(a[i] <= b[j]) {
15 result[k++] = a[i++];
16 }else{
17 result[k++] = b[j++];
18 }
19
20 /* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 */
21 while(i < a.length)
22 result[k++] = a[i++];
23 while(j < b.length)
24 result[k++] = b[j++];
25
26 return result;
27 }
28 else
29 {
30 System.out.print("非有序数组,不可排序!");
31 return null;
32 }
33 }
34
35 //检查数组是否是顺序存储的
36 public static boolean checkSort(int a[])
37 {
38 boolean change = true; //这个标志位是一种优化程序的方法,可以看看我写的冒泡排序优化就会明白了
39 for(int i=0; i<a.length-1 && change; i++)
40 {
41 for(int j=i+1; j<a.length; j++)
42 if(a[j-1] > a[j])
43 return false;
44 else change = false;
45 }
46 return true;
47 }
48
49 // 打印函数
50 public static void print(int b[])
51 {
52 for(int i=0; i<b.length ; i++)
53 {
54 System.out.print(b[i] + (i%10 ==9 ? "\n":"\t"));
55 }
56 }
57
58 public static void main(String args[])
59 {
60 int a[]={1,2,2,3,5,6,7,7};
61 int b[]={1,2,4,5,8,8,9,10,11,12,12,13,14};
62 int c[]= MergeList(a,b);
63 if(c!=null)
64 print(c);
65 else
66 System.out.println("");
67 }
68 }
总结:这个算法应该算是经典的了,一定要记住,这一部分应该是数据结构中的链表中的内容。
思想:先依次比较两个数组,按照小的就传入新的数组。当这次比较完之后可能有一个数组的长度很长,留下一些数组,然后在新数组的末尾插入即可。
代码:
1 class ArraySort
2 {
3 //两个有序数组的合并函数
4 public static int[] MergeList(int a[],int b[])
5 {
6 int result[];
7 if(checkSort(a) && checkSort(b)) //检查传入的数组是否是有序的
8 {
9 result = new int[a.length+b.length];
10
11 int i=0,j=0,k=0; //i:用于标示a数组 j:用来标示b数组 k:用来标示传入的数组
12
13 while(i<a.length && j<b.length)
14 if(a[i] <= b[j]) {
15 result[k++] = a[i++];
16 }else{
17 result[k++] = b[j++];
18 }
19
20 /* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 */
21 while(i < a.length)
22 result[k++] = a[i++];
23 while(j < b.length)
24 result[k++] = b[j++];
25
26 return result;
27 }
28 else
29 {
30 System.out.print("非有序数组,不可排序!");
31 return null;
32 }
33 }
34
35 //检查数组是否是顺序存储的
36 public static boolean checkSort(int a[])
37 {
38 boolean change = true; //这个标志位是一种优化程序的方法,可以看看我写的冒泡排序优化就会明白了
39 for(int i=0; i<a.length-1 && change; i++)
40 {
41 for(int j=i+1; j<a.length; j++)
42 if(a[j-1] > a[j])
43 return false;
44 else change = false;
45 }
46 return true;
47 }
48
49 // 打印函数
50 public static void print(int b[])
51 {
52 for(int i=0; i<b.length ; i++)
53 {
54 System.out.print(b[i] + (i%10 ==9 ? "\n":"\t"));
55 }
56 }
57
58 public static void main(String args[])
59 {
60 int a[]={1,2,2,3,5,6,7,7};
61 int b[]={1,2,4,5,8,8,9,10,11,12,12,13,14};
62 int c[]= MergeList(a,b);
63 if(c!=null)
64 print(c);
65 else
66 System.out.println("");
67 }
68 }
总结:这个算法应该算是经典的了,一定要记住,这一部分应该是数据结构中的链表中的内容。
相关文章推荐
- Java将两个有序链表合并为一个有序链表、将两个有序数组合并成一个有序数组
- 两个有序数组合并为一个有序数组
- 两个有序数组合并为一个有序数组
- 合并两个有序数组为一个新的有序数组
- iOS 笔试题~两个有序数组合并成一个有序数组
- 两个有序数组合并成一个有序数组
- 如何将两个有序的一维数组合并为一个有序的一维数组合
- 两个有序数组合并成一个大的有序数组
- 将两个数组A和B合并为一个有序的C数组
- java将两个有序数组合并成一个有序数组
- 将两个有序的数组合并成一个有序的数组
- 两个有序数组合并为一个有序数组
- 两个有序数组合并为一个及归并排序实例
- 两个有序数组合并成一个有序数组
- 算法 - 合并两个有序数组为一个有序数组
- 将两个排好序的数组,合并到另外一个数组中,并且合并之后的数组也是有序的。
- 如何将两个有序的一维数组合并为一个有序的一维数组合
- C 语言,将两个数组合并到另外一个数组中,并且合并之后的数组是有序的。
- 合并有序的两个数字数组为一个
- 两个有序数组合并成一个新的有序数组