算法 - 合并两个有序数组成一个有序数组
最近看到一个算法题目,觉得很有意义,就自己查资料,摸索着自己实现了代码,特记录一下。
题目:有两个数组a[]和b[],将它们合并成数组c[],需要c[]也是有序数组。
有两种实现思路:
1. 定义一个新数组,长度为两个数组长度之和,将两个数组都copy到新数组,然后排序。
2. 给两个数组分别定义一个下标,最大长度是数组长度减一,按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时退出循环,此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成。
第一种方式应该是大多数人想到的,也比较容易实现,下面主要来实现第二种方式。
代码如下:
public static int[] MergeList(int a[],int b[]) { int result[]; // 定义一个新数组,长度为两个数组长度之和 result = new int[a.length+b.length]; //i:a数组下标 j:b数组下标 k:新数组下标 int i=0,j=0,k=0; // 按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标等于数组长度时退出循环 while(i<a.length && j<b.length) if(a[i] <= b[j]) { result[k++] = a[i++]; print(result); System.out.println(); }else{ result[k++] = b[j++]; } /* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 * * 此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成*/ while(i < a.length) result[k++] = a[i++]; while(j < b.length) result[k++] = b[j++]; return result; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构