news 2026/8/22 2:16:39

【详解】使用Java解决:将一个数按原有规律插入已排序数组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【详解】使用Java解决:将一个数按原有规律插入已排序数组

使用Java解决:将一个数按原有规律插入已排序数组

在日常编程中,我们经常遇到需要对已排序的数组进行操作的情况。其中一个常见的问题是:给定一个已经按照升序或降序排列的数组,以及一个待插入的新元素,如何将这个新元素按照原有的顺序规则插入到数组中的正确位置?本文将通过Java语言实现这一功能。

1. 问题描述

假设我们有一个已经按照升序排列的整型数组 ​​arr​​ 和一个待插入的整数 ​​num​​。我们的任务是编写一个方法,将 ​​num​​ 插入到 ​​arr​​ 中,使得插入后的数组仍然保持升序排列。

2. 解决方案

2.1 算法思路
  1. 遍历数组:从数组的第一个元素开始,逐个比较每个元素与待插入的 ​​num​​。
  2. 确定插入位置:找到第一个大于或等于 ​​num​​ 的元素的位置,即为 ​​num​​ 应该插入的位置。
  3. 移动元素:将插入位置及其之后的所有元素向后移动一位,腾出空间插入 ​​num​​。
  4. 插入元素:将 ​​num​​ 插入到确定的位置。
2.2 Java代码实现
public class InsertIntoSortedArray { /** * 将一个数插入到已排序的数组中,并保持数组的有序性。 * * @param arr 已排序的数组 * @param num 待插入的数 * @return 插入后的数组 */ public static int[] insert(int[] arr, int num) { // 创建一个新的数组,长度比原数组多1 int[] newArr = new int[arr.length + 1]; // 找到插入位置 int insertPos = 0; while (insertPos < arr.length && arr[insertPos] < num) { insertPos++; } // 将插入位置之前的元素复制到新数组 System.arraycopy(arr, 0, newArr, 0, insertPos); // 插入新元素 newArr[insertPos] = num; // 将插入位置之后的元素复制到新数组 System.arraycopy(arr, insertPos, newArr, insertPos + 1, arr.length - insertPos); return newArr; } public static void main(String[] args) { int[] arr = {1, 3, 5, 7, 9}; int num = 4; int[] result = insert(arr, num); // 输出结果 for (int i : result) { System.out.print(i + " "); } } }
2.3 代码解释
  • 创建新数组:由于插入一个元素会导致数组长度增加,因此我们需要创建一个新的数组 ​​newArr​​,其长度比原数组 ​​arr​​ 多1。
  • 确定插入位置:通过一个 ​​while​​ 循环,找到第一个大于或等于 ​​num​​ 的元素的位置 ​​insertPos​​。
  • 复制元素:使用 ​​System.arraycopy​​ 方法将插入位置之前的元素复制到新数组,然后将 ​​num​​ 插入到 ​​insertPos​​ 位置,最后将插入位置之后的元素复制到新数组。
  • 输出结果:在 ​​main​​ 方法中调用 ​​insert​​ 方法,并输出插入后的数组。

3. 性能分析

  • 时间复杂度:最坏情况下,需要遍历整个数组来找到插入位置,时间复杂度为 O(n),其中 n 是数组的长度。
  • 空间复杂度:由于创建了一个新的数组,空间复杂度为 O(n)。

在Java中,处理已排序数组并插入新元素是一个常见的任务。下面是一个简单的示例代码,展示了如何实现这一功能。

示例代码
import java.util.Arrays; public class SortedArrayInsertion { public static void main(String[] args) { // 已排序的数组 int[] sortedArray = {1, 3, 4, 10, 12}; // 要插入的数 int numberToInsert = 7; // 插入后的数组 int[] resultArray = insertIntoSortedArray(sortedArray, numberToInsert); // 输出结果 System.out.println("原始数组: " + Arrays.toString(sortedArray)); System.out.println("插入后数组: " + Arrays.toString(resultArray)); } /** * 将一个数插入到已排序的数组中,并保持数组有序。 * * @param sortedArray 已排序的数组 * @param numberToInsert 要插入的数 * @return 插入后的数组 */ public static int[] insertIntoSortedArray(int[] sortedArray, int numberToInsert) { // 创建一个新的数组,长度比原数组多1 int[] resultArray = new int[sortedArray.length + 1]; // 遍历原数组,找到插入位置 int i; for (i = 0; i < sortedArray.length; i++) { if (numberToInsert <= sortedArray[i]) { break; } } // 将原数组的前i个元素复制到新数组 System.arraycopy(sortedArray, 0, resultArray, 0, i); // 插入新元素 resultArray[i] = numberToInsert; // 将原数组剩余的元素复制到新数组 System.arraycopy(sortedArray, i, resultArray, i + 1, sortedArray.length - i); return resultArray; } }
代码解释
  1. 定义已排序的数组和要插入的数
int[] sortedArray = {1, 3, 4, 10, 12}; int numberToInsert = 7;
  1. 调用插入方法
int[] resultArray = insertIntoSortedArray(sortedArray, numberToInsert);
  1. 插入方法insertIntoSortedArray​:
  • 创建一个新的数组,长度比原数组多1。
  • 遍历原数组,找到插入位置。
  • 使用 ​​System.arraycopy​​ 方法将原数组的前i个元素复制到新数组。
  • 插入新元素。
  • 使用 ​​System.arraycopy​​ 方法将原数组剩余的元素复制到新数组。
  1. 输出结果
System.out.println("原始数组: " + Arrays.toString(sortedArray)); System.out.println("插入后数组: " + Arrays.toString(resultArray));
运行结果
原始数组: [1, 3, 4, 10, 12] 插入后数组: [1, 3, 4, 7, 10, 12]

如果有任何问题或需要进一步的解释,请随时告诉我。在Java中,要将一个元素插入到一个已经排序的数组中,并保持数组的有序性,可以采用以下步骤:

  1. 遍历数组:从头开始或从尾开始遍历数组,找到合适的插入位置。
  2. 移动元素:如果找到的位置不是数组的末尾,则需要将该位置及其后的所有元素向后移动一位,为新元素腾出空间。
  3. 插入元素:将新元素插入到找到的位置。

下面是一个具体的实现示例:

public class InsertIntoSortedArray { public static void main(String[] args) { // 已经排序的数组 int[] sortedArray = {1, 3, 4, 10, 15}; // 要插入的元素 int elementToInsert = 7; // 插入元素 int[] resultArray = insertIntoSortedArray(sortedArray, elementToInsert); // 打印结果数组 for (int num : resultArray) { System.out.print(num + " "); } } public static int[] insertIntoSortedArray(int[] array, int element) { // 创建一个新的数组,长度比原数组多1 int[] newArray = new int[array.length + 1]; // 遍历原数组,找到插入位置 int i; for (i = 0; i < array.length; i++) { if (element < array[i]) { break; } } // 将新元素插入到找到的位置 newArray[i] = element; // 将原数组的前i个元素复制到新数组 System.arraycopy(array, 0, newArray, 0, i); // 将原数组的剩余部分复制到新数组 System.arraycopy(array, i, newArray, i + 1, array.length - i); return newArray; } }
代码解释
  1. 主方法main​:
  • 定义了一个已经排序的数组 ​​sortedArray​​ 和一个要插入的元素 ​​elementToInsert​​。
  • 调用 ​​insertIntoSortedArray​​ 方法将元素插入到数组中。
  • 打印结果数组。
  1. 方法insertIntoSortedArray​:
  • 创建一个新的数组 ​​newArray​​,其长度比原数组多1。
  • 遍历原数组,找到第一个大于或等于要插入元素的位置 ​​i​​。
  • 将新元素插入到位置 ​​i​​。
  • 使用 ​​System.arraycopy​​ 方法将原数组的前 ​​i​​ 个元素复制到新数组的前 ​​i​​ 个位置。
  • 使用 ​​System.arraycopy​​ 方法将原数组的剩余部分复制到新数组的 ​​i+1​​ 位置及其之后的位置。
  • 返回新的数组 ​​newArray​​。
注意事项
  • 如果数组是升序排列的,代码中的比较条件 ​​element < array[i]​​ 是正确的。
  • 如果数组是降序排列的,需要将比较条件改为 ​​element > array[i]​​。
  • 这种方法的时间复杂度是 O(n),其中 n 是数组的长度,因为最坏情况下需要遍历整个数组并移动所有元素。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 2:16:38

java毕业设计——基于JSP+sqlserver的公司办公信息管理系统设计与实现(毕业论文+程序源码)——办公信息管理系统

基于JSPsqlserver的公司办公信息管理系统设计与实现&#xff08;毕业论文程序源码&#xff09; 大家好&#xff0c;今天给大家介绍基于JSPsqlserver的公司办公信息管理系统设计与实现&#xff0c;文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文…

作者头像 李华
网站建设 2026/8/22 2:16:38

老版本chrome浏览器版本下载地址

https://www.slimjet.com/chrome/google-chrome-old-version.php linux系统.deb包安装chrome Exported on 2026/3/13 at GMT8 16:07:42 from Cursor (2.2.20)User 系统支持安装.deb格式的包吗&#xff1f;Cursor 检查系统是否支持安装 .deb 包。 检查包管理器并确认是否可安装相…

作者头像 李华
网站建设 2026/7/14 16:36:47

Code Composer Studio (CCS): 全局搜索功能

Code Composer Studio {CCS}: 全局搜索功能1. Ctrl H&#xff0c;全局搜索功能References1. Ctrl H&#xff0c;全局搜索功能 References [1] Yongqiang Cheng (程永强), https://yongqiang.blog.csdn.net/

作者头像 李华
网站建设 2026/8/22 2:16:35

Code Composer Studio (CCS): Comment (注释)

Code Composer Studio {CCS}: Comment {注释}ReferencesAdd Block Comment: 选中几行代码 -> 鼠标右键 -> Source -> Add Block Comment shortcut key: Ctrl Shift / Remove Block Comment: 选中几行代码->鼠标右键->Source->Remove Block Comment shor…

作者头像 李华
网站建设 2026/7/14 16:36:51

CCV库图像处理API完全指南:从理论到实践

CCV库图像处理API完全指南&#xff1a;从理论到实践 【免费下载链接】ccv C-based/Cached/Core Computer Vision Library, A Modern Computer Vision Library 项目地址: https://gitcode.com/gh_mirrors/cc/ccv CCV&#xff08;C-based/Cached/Core Computer Vision Lib…

作者头像 李华