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 ...
随机推荐
- 关于成本标签管理-基于-Resource Groups & Tag Editor-统计指定Project-所有资源
背景:因我们所有AWS都是使用Project标签作为成本标签的,今天因一个项目决定彻底退役下线 于是决定要完全清理此项目的所有资源,防止继续产生费用~ 首先想到的去通过Project 在ec2 , s ...
- uoj220【NOI2016】网格
刚了几个小时啊,这tm要是noi我怕不是直接滚粗了.我判答案为1的情况试了几种做法,最后终于想到了一个靠谱的做法,然后细节巨多,调了好久,刚拿到97分时代码有6.2KB了,后来发现有些东西好像没啥用就 ...
- 面向对象day1,创建类和对象时,对象内存是在哪
上面我创建了两个类,一个是测试类,在测试包里面,一个是生产类,在src文件里面.可以看到,调用类里面的对象的时候需要先创建一个对象,然后通过对象来调用类里面的属性和方法等,但是这个时候我得先记录一下, ...
- 【算法】浅学 LCA
参考资料 浅析最近公共祖先(LCA) 最近公共祖先 - OI Wiki [白话系列]倍增算法 一.概念 最近公共祖先称为 LCA (Lowest Common Ancestor) 它指的是在一颗树中, ...
- fun无处不在 搜索结果调用其他字段的办法
一直有人要搜索结果调用其他字段的信息 比如图片等等 一直忙没顾上 官方其实已经内置了一个内容读取器. 我们打开搜索的结果模板template\index_style\你的模板目录\search\ind ...
- CJK备注
pip清华镜像库 :pip install XXX -i https://pypi.tuna.tsinghua.edu.cn/simple pip阿里巴巴镜像库:pip install XXX -i ...
- Nacos基本学习
一.注册中心 1.启动 1.下载nacos 在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码: GitHub主页:https://github.com/ali ...
- python中的字符串学习
# 1.字符串的下标(索引) # 取字符串中的子串 print('1.字符串的下标(索引)') str1 = 'PYTHON' print(str1[0]) print(str1[-4]) # 2.字 ...
- ES6学习笔记(十四)module的简单使用
1.前言 module模块机制是es6新引入的,它解决了作用域的问题,使代码更加规范和结构化. 下面简单的使用一下. 2.基本使用 2.1 模块和脚本的区别 模块代码运行在严格模式下,并且没有任何办法 ...
- CF620E New Year Tree(树形+dfs序+线段树+状态压缩)
题目链接 题目大意 \(~~\)给出一棵 nn 个节点的树,根节点为 11.每个节点上有一种颜色 c\(_{i}\) 和m 次操作.操作有两种: \(~~~~\) 1. 1\(~\)u\(~\)c:将 ...