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 ...
随机推荐
- 内网横向渗透 之 ATT&CK系列一 之 拿下域控制器
信息收集 信息收集 域控制器的相关信息: 通过arp扫描发现域控制器的ip地址为:192.168.52.138,尝试使用msf的smb_login模块登录smb是否成功 1 search smb_lo ...
- 小白入行安全圈内必须知道的top10
OWASP Top10 前言 每年的Top10都在更新,但是一般不会有太大的改变,这里说明的是 2021年的Top10排行榜. A01:访问控制失效(Broken Access Control) 攻击 ...
- 阿里云服务器部署Web环境
一.配置阿里云服务器 进入阿里云官方网站(https://www.aliyun.com/). 初次使用的话使用支付宝快速注册账户,并进行个人实名认证. 点击试用中心. 选择第二个,云服务器2核4G. ...
- SQL通用语法和SQL分类
SQL通用语法 1.SQL 语句可以单行或多行书写,以分号结尾 2.可使用空格和缩进来增强语句的可读性 3.MySQL 数据库的SQL语句不区分大小写,关键字建议使用大写 4.3种注释 单行注释: - ...
- [题解] Topcoder 15279 SRM 761 Div 1 Level 3 SpanningSubgraphs DP,容斥
题目 考虑DP.\(f(msk,i)\) 表示集合 \(msk(一定包含0号点)\) ,选了恰好i条边的连通方案数.转移用容斥,用这个点集内部所有连边方案减去不连通的.令\(|e_{msk}|\)表示 ...
- Spring笔记三
Spring-03 1. AOP 1.1 概念 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程.他是一种可以在不修改原来的核心代码的情况下给程序动态统一进 ...
- Dropout----Dropout来源
目录 一.简单介绍及公式 二.为什么dropout有效-原因定性分析 2.1 ensemble论 2.1.1 ensemble 2.1.2 动机:联合适应(co-adapting) 思考: 2.1.3 ...
- jquery+bootstrap学习笔记
最近小颖接了个私活,客户要求用jquery和bootstrap来实现业务需求,小颖总结了下在写的过程中的一下坑,来记录一下 1.动态加载html文件 switch (_domName) { case ...
- VUE v-model 语法糖
v-model 语法糖 描述:弹出利用v-model语法糖 父组件 子组件
- stm32h750移植lvgl
之前没做过ui,只用过lcd画几条线写点字,如果按键.菜单什么的全用线画也太麻烦了,所以需要一个ui库. 听说lvgl用的人很多,就打算裸机移植一下用用.本文移植的lvgl版本是lvgl6.2,也移植 ...