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

  注意與順序表中個的插入數組進行區別,因為數組的長度是固定的,無法像順序表那樣依次移動元素進行操作!否則會產生數組越界錯誤!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM