06 如何在一個有序數組中插入一個數據並使新數組保持有序(默認升序)


如何在一個有序數組中插入一個數據並使新數組保持有序(默認升序)

准備工作

import java.util.Scanner;
public class TestClass01 {
    public static void main(String[] args) {
        //在有序數組中插入一個元素,使得插入后所有的元素也保持有序,這里以升序為例
        int[] number={1,5,7,9};
        int[] number01=new int[number.length+1];//定義一個新數組,長度為老數組長度+!
        System.out.println("要插入元素的有序數組如下所示:");
        for (int i = 0; i < number.length; i++) {
            System.out.print(number[i]+"\t");
        }
        System.out.println();
        System.out.println("請輸入插入的數");
        Scanner scanner=new Scanner(System.in);
        int insert_number=scanner.nextInt();
    }
}

第一種 后移法

思路:

第一步:找到插入的下標

​ 分三種情況:

​ 第一種:當插入的元素值小於等於老數組的第一個值時,插入的下標為0

​ 第二種:當插入的元素值大於等於老數組的最后一個值時,插入的下標為數組長度

​ 第三種:正常進行注意部分的判斷

第二步:把舊數組的插入下標之前的數據全部賦值給新數組

第三步:把插入的值賦值到新數組的插入下標的位置

第四步:把舊數組的插入下標以及之后的數據依次賦值給新數組插入下標+1及之后的位置(每次新數組接收都要加1)

  //第一種方法,后移法
        //第一步,先找到插入的位置
        int index=0;//定義一個變量存放插入的位置
        //從原數組里面找
        //有三種情況,第一種,插入的元素小於等於第一個元素,第二種情況在插入的數在中間位置,第三種情況為插入的數大於等於最后一個元素
        if(insert_number<=number[0]){
            index=0;   //第一種情況
        }else if(insert_number>=number[number.length-1]){
            index=number.length;//第三種情況
        }else{
            for (int i = 0; i < number.length-1; i++) {
                if(number[i]<=insert_number&&number[i+1]>=insert_number){
                    index=i+1;   //第二種情況
                    break;
                }
            }
        }
        //第二步,把老數組插入位置前的數據全部賦值給新數組
        for (int i = 0; i < index; i++) {
            number01[i]= number[i];
        }
        //第三步,把插入的值賦值給新數組的插入位置
        number01[index]=insert_number;
        //第四步,把老數組剩下的數據依次賦值給新數組插入位置后
        for (int i = index; i <number.length; i++) {
            number01[i+1]= number[i];
        }
        //第五步,驗證:插入后排序
        System.out.println("輸出插入數據"+insert_number+"后排序的數組如下所示");
        for (int i = 0; i < number01.length; i++) {
            System.out.print(number01[i]+"\t");
        }

注意:插入下標應該滿足:使得該位置的前一個數小於等於插入的數據,該位置的的后一個數大於等於插入的數據

第二種 插入位置放最后,然后兩兩比較

思路:

第一步:把舊數組的數據全部賦值給新數組的數據

第二步:把插入的元素放入新數組的最后一個位置

第三步:從新數組的末尾開始遍歷整個新數組,如果當前位置的元素比前面一個位置的元素小,那么就把他們之前進行交換,交換完所有的之后就排序完成了.

  //第二種方法,放最后依次相比法
        //第一步,把老數組的元素全部賦值給新數組
        for (int i = 0; i < number.length; i++) {
            number01[i]= number[i];
        }
        //第二步,把插入的元素放入新數組的最后一個位置
        number01[number01.length-1]=insert_number;
        //第三步,從新數組的最后一個元素起開始遍歷整個,數組
        // 若當前位置的元素比前面一個元素的值小,則進行兩兩交換
        //直到遍歷結束,此時新數組排序已經成功
        for (int i = number01.length-1; i>0; i--) {
            //比它小就互換,因為是升序,遍歷到第一個元素的時候就不需要比較了,所以i無需等於0
           if(number01[i]<number01[i-1]){
               int temp=number01[i];//定義一個臨時變量用來進行數據交換
               number01[i]=number01[i-1];
               number01[i-1]=temp;
           }
        }
        //第四步,驗證是否排序成功
        System.out.println("輸出插入數據"+insert_number+"后排序的數組如下所示");
        for (int i = 0; i < number01.length; i++) {
            System.out.print(number01[i]+"\t");
        }


免責聲明!

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



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