第一种:依次与有序数组中的每个数进行比较,然后找到位置之后,定义一个新的数组,该信数组的长度加一,再使用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如何在一个有序的数组类插入一个数!的更多相关文章

  1. 【C语言】在有序数组中插入一个数,保证它依然有序

    #include<stdio.h> int main() { ] = { ,,,,,, }; int key, i, j; printf("请输入一个数\n"); sc ...

  2. Problem F: 零起点学算法85——数组中插入一个数

    #include<stdio.h> int main() { ],b[]; while(scanf("%d",&n)!=EOF) { ;i<n;i++) ...

  3. 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, * 使其插入完成后仍然有序,运行结 ...

  4. java基础37 集合框架工具类Collections和数组操作工具类Arrays

    一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...

  5. 【java集合总结】-- 数组总结+自己封装数组类

    一.前言 本篇文章总结目前学习的有关数组方面的知识,首先总结一下数组相关的核心概念,然后在封装一个自己的泛型动态数组类(ava已经封装的有现成的,自己封装只是为了加深理解),最后再学习解析下Array ...

  6. 【数据结构与算法】Java制作一个简单数组类

    bobo老师的玩转算法系列–玩转数据结构 简单记录 文章目录 不要小瞧数组 - 制作一个数组类 1 .使用Java中的数组 数组基础 简单使用 2.二次封装属于我们自己的数组 数组基础 制作属于我们自 ...

  7. Java中数组的插入,删除,扩张

    Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...

  8. 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  9. java面向对象的有序数组和无序数组的比较

    package aa; class Array{ //定义一个有序数组 private long[] a; //定义数组长度 private int nElems; //构造函数初始化 public ...

随机推荐

  1. has leaked ServiceConnection com.baidu.location.LocationClient

    02-06 05:01:52.806: E/ActivityThread(1120): Activity com.project.xxxActivity $1@45fc5af8 that was or ...

  2. 给WebApp加一个“壳”,实现Andriod系统添加到桌面

    IOS系统的Safari浏览器有一个“添加到桌面”的功能,能在手机桌面上为你的Webapp添加一个快捷方式,其外观和Native App看起来一样. 这个功能对Webapp来说太有用了,它能让用户像“ ...

  3. 开源日志库log4cplus+VS2008使用

    一.简介     log4cplus是C++编写的开源的日志系统,功能非常全面.本文介绍如何在Windows+VS2008中使用该日志库.   二.下载     可从网站[url]http://log ...

  4. (二)boost库之字符串格式化

    (二)boost库之字符串格式化 程序中经常需要用到字符串格式化,就个人而言还是比较倾向于C格式的输出,如果只是打印日志,printf就够了,如果到生成字符串,获取你可以选择sprintf,但这些都是 ...

  5. 必学100个常用linux命令大全

    1,echo “aa” > test.txt 和 echo “bb” >> test.txt //>将原文件清空,并且内容写入到文件中,>>将内容放到文件的尾部 2 ...

  6. 学习笔记之--java EE 环境的搭建

    一.前期准备.(apache-maven-3.0.5.apache-tomcat-7.0.23-windows-x86.eclipse-jee-kepler-SR1-win32.jdk-7u45-wi ...

  7. Mysql 多表查询

    文章转载的:http://www.cnblogs.com/BeginMan/p/3754322.html 一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM tab ...

  8. Codeforces Round #156 (Div. 2)---A. Greg&#39;s Workout

    Greg's Workout time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  9. ActionScript简单实现Socket Tcp应用协议分析器

    转自..smark http://www.cnblogs.com/smark/archive/2012/05/15/2501507.html ActionScript简单实现Socket Tcp应用协 ...

  10. Oracle日志文件常用操作

    Oracle关于日志文件基本操作1.查询系统使用的是哪一组日志文件:select * from v$log; 2.查询正在使用的组所对应的日志文件:select * from v$logfile; 3 ...