两个有序数组合并为一个有序数组 [全屏看文]
突然想到了这个算法,记得以前看过,但是没写,怕自己会写不出这个算法,于是就把它用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 }
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 }
总结:这个算法应该算是经典的了,一定要记住,这一部分应该是数据结构中的链表中的内容。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架