【详解】使用Java解决:将一个数按原有规律插入已排序数组
【摘要】 使用Java解决:将一个数按原有规律插入已排序数组在日常编程中,我们经常遇到需要对已排序的数组进行操作的情况。其中一个常见的问题是:给定一个已经按照升序或降序排列的数组,以及一个待插入的新元素,如何将这个新元素按照原有的顺序规则插入到数组中的正确位置?本文将通过Java语言实现这一功能。1. 问题描述假设我们有一个已经按照升序排列的整型数组 arr 和一个待插入的整数 num...
使用Java解决:将一个数按原有规律插入已排序数组
在日常编程中,我们经常遇到需要对已排序的数组进行操作的情况。其中一个常见的问题是:给定一个已经按照升序或降序排列的数组,以及一个待插入的新元素,如何将这个新元素按照原有的顺序规则插入到数组中的正确位置?本文将通过Java语言实现这一功能。
1. 问题描述
假设我们有一个已经按照升序排列的整型数组 arr 和一个待插入的整数 num。我们的任务是编写一个方法,将 num 插入到 arr 中,使得插入后的数组仍然保持升序排列。
2. 解决方案
2.1 算法思路
- 遍历数组:从数组的第一个元素开始,逐个比较每个元素与待插入的
num。 - 确定插入位置:找到第一个大于或等于
num 的元素的位置,即为 num 应该插入的位置。 - 移动元素:将插入位置及其之后的所有元素向后移动一位,腾出空间插入
num。 - 插入元素:将
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;
}
}
代码解释
- 定义已排序的数组和要插入的数:
int[] sortedArray = {1, 3, 4, 10, 12};
int numberToInsert = 7;
- 调用插入方法:
int[] resultArray = insertIntoSortedArray(sortedArray, numberToInsert);
- 插入方法
insertIntoSortedArray:
- 创建一个新的数组,长度比原数组多1。
- 遍历原数组,找到插入位置。
- 使用
System.arraycopy 方法将原数组的前i个元素复制到新数组。 - 插入新元素。
- 使用
System.arraycopy 方法将原数组剩余的元素复制到新数组。
- 输出结果:

System.out.println("原始数组: " + Arrays.toString(sortedArray));
System.out.println("插入后数组: " + Arrays.toString(resultArray));
运行结果
原始数组: [1, 3, 4, 10, 12]
插入后数组: [1, 3, 4, 7, 10, 12]

如果有任何问题或需要进一步的解释,请随时告诉我。在Java中,要将一个元素插入到一个已经排序的数组中,并保持数组的有序性,可以采用以下步骤:
- 遍历数组:从头开始或从尾开始遍历数组,找到合适的插入位置。
- 移动元素:如果找到的位置不是数组的末尾,则需要将该位置及其后的所有元素向后移动一位,为新元素腾出空间。
- 插入元素:将新元素插入到找到的位置。
下面是一个具体的实现示例:
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;
}
}
代码解释
- 主方法
main:
- 定义了一个已经排序的数组
sortedArray 和一个要插入的元素 elementToInsert。 - 调用
insertIntoSortedArray 方法将元素插入到数组中。 - 打印结果数组。
- 方法
insertIntoSortedArray:
- 创建一个新的数组
newArray,其长度比原数组多1。 - 遍历原数组,找到第一个大于或等于要插入元素的位置
i。 - 将新元素插入到位置
i。 - 使用
System.arraycopy 方法将原数组的前 i 个元素复制到新数组的前 i 个位置。 - 使用
System.arraycopy 方法将原数组的剩余部分复制到新数组的 i+1 位置及其之后的位置。 - 返回新的数组
newArray。
注意事项
- 如果数组是升序排列的,代码中的比较条件
element < array[i] 是正确的。 - 如果数组是降序排列的,需要将比较条件改为
element > array[i]。 - 这种方法的时间复杂度是 O(n),其中 n 是数组的长度,因为最坏情况下需要遍历整个数组并移动所有元素。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者

评论(0)