java顺序数组插入元素
本文主要阐明已知顺序数组,在数组中插入一个数据元素,使其仍然保持有序。
关键是寻找num在原数组中插入的位置;
当num在原数组中是最大的情况,num应该插入到原数组的末尾。
否则,应该遍历原数组,通过比较原数组元素和num,找到插入位置,进行右移,最后在指定位置上插入num元素。
public class Two {
public int[] SortArray(int[] arr,int num) {
int index = 0;
int[] arr_copy = new int[arr.length+1];
for(int i =0 ;i<arr.length;i++) {
arr_copy[i] = arr[i];
} // 最后一个元素
if(arr_copy[arr.length-1] <= num) {
arr_copy[arr_copy.length-1] = num;
return arr_copy;
} for(int i =0;i<arr.length;i++) {
if(arr_copy[i] > num) {
index = i;
break;
}
} // 将index之后的数据右移,空出index索引指向的空间。
// i > index,不能是i >= index;
// 当index = 0 时,若i >= index,则最后一次循环i = 0,则
// arr_copy[i] = arr_copy[i-1]; 数组越界报错!!!
for(int i = arr_copy.length-1;i > index;i--) {
// index之后的数据向右移动
arr_copy[i] = arr_copy[i-1];
}
arr_copy[index] = num; return arr_copy;
}
public static void main(String[] args) {
int[] arr = {10,12,45,90};
// 加入23后依然是升序
System.out.println("请输入数据:");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
Two obTwo = new Two();
arr = obTwo.SortArray(arr, num);
for(int i = 0; i<arr.length;i++) {
System.out.print(arr[i] + " ");
} } }
韩老师思路:
首先定位,用index表示要插入的位置,遍历原来的数组,如果原来数组元素大于或等于num,index指向该元素的索引。否则,index的值不发生变化,即num是最大值,插入原来数组的末尾。
注意,这里的插入操作有些技巧。
用 i 指针指向新数组,j 指针指向旧数组。当 i 不等于index时,即 i 不是要插入的位置时,arr_copy[ i ] = arr[ i ] ,i++,j++;
当 i 等于index时,即 i 指向了要插入的位置时,arr_copy[ i ] = num ,i++,j不做自增操作。
具体代码如下:
for(int i = 0,j = 0;i<arr_copy.length;i++) {
// 当i!=index时,即不是要插入的位置,
if(i != index) {
arr_copy[i] = arr[j];
j++;
}else {
arr_copy[i] = num;
}
}
操作过程如下,有两个指针i和j,j 指向原来的数组,i 指向新的数组
i++,得i == 1,j++,得 j== 1。
i++,得i == 2,j++,得j == 2。
此时 i == index,则插入新添加的元素。
i++,得i == 3,此时 j 不做自增操作。
i++,得i == 4,j++,得j == 3。
完整代码如下:
public class Two {
public int[] SortArray(int[] arr,int num) {
int index = -1;
int[] arr_copy = new int[arr.length+1];
// 先定位后插入
for(int i=0;i<arr.length;i++) {
if(arr[i] >= num) {
index = i;
break;
}
} if(index == -1) {
index = arr.length;
} for(int i = 0,j = 0;i<arr_copy.length;i++) {
// 当i!=index时,即不是要插入的位置,
if(i != index) {
arr_copy[i] = arr[j];
j++;
}else {
arr_copy[i] = num;
}
} return arr_copy;
}
public static void main(String[] args) {
int[] arr = {10,12,45,90};
// 加入23后依然是升序
System.out.println("请输入数据:");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
Two obTwo = new Two();
arr = obTwo.SortArray(arr, num);
for(int i = 0; i<arr.length;i++) {
System.out.print(arr[i] + " ");
} } }
java顺序数组插入元素的更多相关文章
- java去除数组重复元素的方法
转载自:https://blog.csdn.net/Solar24/article/details/78672500 import java.util.ArrayList; import java.u ...
- java 数组插入元素
import java.util.Arrays; public class AddArray { public static void main(String[] args) { int[] arr ...
- Java中数组判断元素存在几种方式比较详解
1. 通过将数组转换成List,然后使用List中的contains进行判断其是否存在 public static boolean useList(String[] arr,String contai ...
- JavaScript 数组插入元素并排序
1.插入类排序 插入类排序的思想是:在一个已排好序的序列区内,对待排序的无序序列中的记录逐个进行处理,每一步都讲待排序的记录和已排好的序列中的记录进行比较,然后有序的插入到该序列中,直到所有待排序的记 ...
- java List 数组删除元素
在 java 中,ArrayList 是一个很常用的类,在编程中经常要对 ArrayList 进行增.删.改.查操作.之前在学校时一直认为删除操作是最简单的,现在才越发觉得自己愚蠢.只需要设置好预期条 ...
- Java查找数组重复元素,并打印重复元素、重复次数、重复元素位置
面试题查找重复元素并打印重复次数和重复位置,一顿懵逼,回来死磕写下来,打印指定重复次数和最大次数,其他在此基础上可以再更新 package sort; import org.testng.annota ...
- C# 往string [] arr 数组插入元素
string [] arr ; List<string> _list = new List<string>(arr ); for(int i ;i<10;i++) { _ ...
- php 数组插入元素
<?php $a=array("red","green"); array_push($a,"blue","yellow&qu ...
- Java方法-数组
[Java数组] 1. 用sort()方法对Java数组进行排序,及如何使用 binarySearch() 方法来查找数组中的元素 binarySearch() 返回值: 如果它包含在数组中,则返回搜 ...
- Java-Runoob-高级教程-实例-数组:02. Java 实例 – 数组添加元素
ylbtech-Java-Runoob-高级教程-实例-数组:02. Java 实例 – 数组添加元素 1.返回顶部 1. Java 实例 - 数组添加元素 Java 实例 以下实例演示了如何使用s ...
随机推荐
- SpringBoot(二) - 核心配置文件
1.application.properties 和 application.yml 配置文件格式区别 1.1 文件格式 application.properties # 端口号 server.por ...
- Springboot 之 Filter 实现超大响应 JSON 数据压缩
简介 项目中,请求时发送超大 json 数据外:响应时也有可能返回超大 json数据.上一篇实现了请求数据的 gzip 压缩.本篇通过 filter 实现对响应 json 数据的压缩. 先了解一下以下 ...
- 基于SqlSugar的开发框架循序渐进介绍(15)-- 整合代码生成工具进行前端界面的生成
在前面随笔<基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理>中我们已经介绍过,对于相关的业务表的界面代码,我们已经尽可能把不同的业务逻辑 ...
- 基于雪花算法的增强版ID生成器
sequence 基于雪花算法的增强版ID生成器 解决了时间回拨的问题 无需手动指定workId, 微服务环境自适应 可配置化 快速开始 依赖引入 <dependency> <gro ...
- break ,continue,retrun的区别
break ,continue,retrun的区别 1:break 在循环体内结束整个循环过程 for (var i = 1; i <= 5; i++) { if(i == 3){ break; ...
- golang单元测试一(简单函数测试)
0.1.索引 https://blog.waterflow.link/articles/1663688140724 1.简介 单元测试是测试代码.组件和模块的单元函数.单元测试的目的是清除代码中的错误 ...
- 从0搭建vue3组件库:自动化发布、管理版本号、生成 changelog、tag
今天看到一篇文章中提到了一个好用的工具release-it.刚好可以用在我正在开发的vue3组件库.纸上得来终觉浅,绝知此事要躬行,说干就干,下面就介绍如何将release-it应用到实际项目中,让组 ...
- Maven 聚合工程的创建
简单场景举例 聚合工程创建示例 说明: 创建 Maven Project:表示创建 maven 项目,new Project 方式创建 创建 Maven Module:表示创建 maven 项目,ne ...
- 设置CMD命令的初始目录
本文提供两种方式,第一种通过打开桌面上的快捷方式实现,第二种可以通过 CMD 命令直接进入. 快捷方式 "开始 ---> 程序 ---> 附件",右键单击 " ...
- tool1
//导出 public void excel(List<Long> ids, HttpServletResponse response) { List<StockPageVo> ...