java如何在一个有序的数组类插入一个数!
第一种:依次与有序数组中的每个数进行比较,然后找到位置之后,定义一个新的数组,该信数组的长度加一,再使用system.arraycopy将于数组copy到新数组!import java.util.Arrays;
import java.util.Scanner;
public class Sort {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int nums[] = new int[10];
System.out.println("请输入一组数字(不超过10个数字):");
for(int i =0 ;i<nums.length;i++){
int j = in.nextInt();
nums[i]=j;}
bubblesort(nums);
Output(nums);
System.out.println("请从键盘输入一个数!");
int a = in.nextInt();
nums=insert(a,nums);
System.out.println("插入数字之后的排序为:");
Output(nums);
}
public static void bubblesort(int [] nums) {//对数组进行冒泡排序
for(int i =0;i<nums.length-1;i++){
for(int j=0;j<nums.length-1-i;j++){
if(nums[j]>nums[j+1])
{
int temp = nums[j];
nums[j] =nums[j+1];
nums[j+1]=temp;
}
}
}
}
public static int[] insert(int a,int [] nums){//进行插入操作
int index = 0;
for(int i = 0;i<nums.length;++i){
if(a>=nums[i]){
index++;}
}
int[] newArray = new int[nums.length + 1];
newArray[index] = a ;
System.arraycopy(nums, 0, newArray, 0 , index );
System.arraycopy(nums, index, newArray, index + 1 , nums.length - index);
return newArray ; //返回新数组
}
public static void Output(int [] nums){
for(int j = 0;j<nums.length;j++){
System.out.print(nums[j]+" ");
}
System.out.println();
}
}
第二种方法:只是查找时略有不同,是用的是二分查找的思想:
import java.util.Arrays;
public class BinaryInsert {
public static void main(String[] args) {
BinaryInsert bt = new BinaryInsert();
int[] array = new int[]{1 , 3 , 6 , 8, 30 , 49 , 60 , 70 , 83 , 85};
System.out.println(Arrays.toString(array));
array = bt.insert(array , 50);
System.out.println(Arrays.toString(array));
}
public int[] insert(int[] sortArray , int value){
int index = findInsertIndex(sortArray , value , 0 , sortArray.length); //找到插入位置
int[] newArray = new int[sortArray.length + 1];
newArray[index] = value ;
System.arraycopy(sortArray, 0, newArray, 0 , index );
System.arraycopy(sortArray, index, newArray, index + 1 , sortArray.length - index);
return newArray ; //返回新数组
}
//找到value适合插入的位置
public int findInsertIndex(int[] sortArray , int value , int left , int right){
int middleIndex = (right - left) / 2 + left ;
int middleValue = sortArray[middleIndex] ;
if(right - left < 2){
if(value > sortArray[right -1 ])
return right;
else if(value > sortArray[left]){
return left + 1;
}else{
return left;
}
}else if(middleValue < value){
return findInsertIndex(sortArray , value , middleIndex + 1 , right);
}else if(middleValue > value){
return findInsertIndex(sortArray , value , left , middleIndex );
}else{
return middleIndex + 1;
}
}
}
注意与顺序表中个的插入数组进行区别,因为数组的长度是固定的,无法像顺序表那样依次移动元素进行操作!否则会产生数组越界错误!
java如何在一个有序的数组类插入一个数!的更多相关文章
- 【C语言】在有序数组中插入一个数,保证它依然有序
#include<stdio.h> int main() { ] = { ,,,,,, }; int key, i, j; printf("请输入一个数\n"); sc ...
- Problem F: 零起点学算法85——数组中插入一个数
#include<stdio.h> int main() { ],b[]; while(scanf("%d",&n)!=EOF) { ;i<n;i++) ...
- java 在数组{1,2,3,4,6,7,8,9,10}中插入一个数5,使其插入完成后仍然有序
1.需要实现的效果 2.代码实现 import java.util.Scanner; /* * 11.在数组{1,2,3,4,6,7,9,8,10}中插入一个数5, * 使其插入完成后仍然有序,运行结 ...
- java基础37 集合框架工具类Collections和数组操作工具类Arrays
一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...
- 【java集合总结】-- 数组总结+自己封装数组类
一.前言 本篇文章总结目前学习的有关数组方面的知识,首先总结一下数组相关的核心概念,然后在封装一个自己的泛型动态数组类(ava已经封装的有现成的,自己封装只是为了加深理解),最后再学习解析下Array ...
- 【数据结构与算法】Java制作一个简单数组类
bobo老师的玩转算法系列–玩转数据结构 简单记录 文章目录 不要小瞧数组 - 制作一个数组类 1 .使用Java中的数组 数组基础 简单使用 2.二次封装属于我们自己的数组 数组基础 制作属于我们自 ...
- Java中数组的插入,删除,扩张
Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...
- 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
- java面向对象的有序数组和无序数组的比较
package aa; class Array{ //定义一个有序数组 private long[] a; //定义数组长度 private int nElems; //构造函数初始化 public ...
随机推荐
- Servlet Examples
Servlet Examples Servlet Examples 1.Hello World output: code: 1.import java.io.*;2.import javax.serv ...
- tar.xz 文件如何解压
XZ压缩最新压缩率之王 xz这个压缩可能很多都很陌生,不过您可知道xz是绝大数linux默认就带的一个压缩工具. 之前xz使用一直很少,所以几乎没有什么提起. 我是在下载phpmyadmin的时候看到 ...
- nginx请求体读取(二)
2,丢弃请求体 一个模块想要主动的丢弃客户端发过的请求体,可以调用nginx核心提供的ngx_http_discard_request_body()接口,主动丢弃的原因可能有很多种,如模块的业务逻辑压 ...
- 使用AES加密的帮助类
在开发中经常使用加密/解密对一些内容进行处理,比如密码在存入数据库之前先经过加密处理等等,这里就把一个加密帮助类代码贴出来,供以后查找使用. 这个帮助类主要功能是对字符串和字节数组进行加密解密处理. ...
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...
- 深入理解事件(event)与委托(delegate)
好久没学.NET了,最近重又开始学习,发现委托有很多变化了,发现事件不明白了(可能以前就没明白过) 网上搜索了几篇文章,也没注意什么时候的,发现都讲的不彻底,综合一下,也当个学习笔记. using S ...
- Geoserver基本使用、WMS服务发布与OpenLayers测试
1.Geoserver与OpenLayers的下载 Geoserver:http://geoserver.org/ OpenLayers:http://openlayers.org/ 2.安装部署Ge ...
- JIRA官方:JIRA报表与分析
访问重要的问题 JIRA系统内置的过滤器可以使你快速访问最重要的问题.通过保存和收藏自定义的过滤器,你可以随时了解项目和团队的优先级. 保持团队同步 创建一个过滤器,可以保存你的任何搜索条件.通过分享 ...
- make的命令行选项
make的命令行选项 -b -m 忽略,提供其它版本make兼容性. -B --always-make 强制重建所有规则的目标,不根据规则的依赖描述决定是否重建目标文件. -C DIR --direc ...
- 3、使用Lucene实现千度搜索
1.新建Web项目 新建一个Web项目,我命名为SearchEngine,然后导入Java包: 除了上篇博客中的Jar包外,我还引入了 IKAnalyzer2012_FF.jar 包和struts2的 ...