• 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;
            }
        }
     
    }
    

      注意与顺序表中个的插入数组进行区别,因为数组的长度是固定的,无法像顺序表那样依次移动元素进行操作!否则会产生数组越界错误!

    善守者藏于九地之下, 善攻者动于九天之上
  • 相关阅读:
    30网络通信之多线程
    U盘自动拷贝
    多态原理探究
    应用安全
    应用安全
    编码表/转义字符/进制转换
    代码审计
    文件上传
    渗透测试-Web安全-SSRF
    中间人攻击
  • 原文地址:https://www.cnblogs.com/jiutiankunpeng/p/5386333.html
Copyright © 2020-2023  润新知