第一种:依次与有序数组中的每个数进行比较,然后找到位置之后,定义一个新的数组,该信数组的长度加一,再使用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. Android进程

    android进程等级 1.前台进程 2.可视进程 3.服务进程 4.后台进程 5.空进程 让应用退出方式 finish();让应用成为空进程 Process.killProcess();杀进程 sy ...

  2. jQuery工具函数上

    1.字符串操作 <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...

  3. Mfgtool

    For bootstrap mode, it refers to the communcation between the host and ROM codes through serial down ...

  4. MYSQL 查看表定义的 4 种方法

    方法 1. show create table table_name;可以用这个看表的代码. show create table Strings; 方法 2. show full columns fr ...

  5. Azure File SMB3.0文件共享服务(4)

    在Linux上使用Azure文件共享服务 使用SMB 3.0从用户自己的数据连接到Azure,需要加密连接,但目前的Linux SMB客户端都暂时都不支持,Linux的开源社区正在努力将该功能添加到L ...

  6. SharedPreference对象及其xml文件

    SharedPreferences对象----->getXXX SharedPreferences.Editor对象---->putXXX

  7. VC++学习之一

    对于编程语言,我一直认为它只是一种工具,就像锤子,斧头一样,每种语言都用自己比较适用的地方,用的时候拿来就可以了.这种思想让我对语言没有做过很仔细的学习,虽然频繁使用过C,C++,java,C#,De ...

  8. 单元测试(UT)、功能测试(FT)(转)

    纯个人总结: 单元测试(UT).功能测试(FT): 目的:1.尽量避免写的代码测试人员频繁的来找你其他地方又出问题了:2.提供的接口不可用:3.一个bug修复了引入了其他的bug或者其他用例变红了: ...

  9. ac命令根据/var/log/wtmp文件登录退出时间计算用户连接时间

    ac命令根据/var/log/wtmp文件登录退出时间计算用户连接时间

  10. python 重要模块

    1,使用字典的特殊字符串替换,基于字典的字符串格式化