java基礎程式問題請益

import java.util.Scanner;

public class Test30 {
    
    public static void main(String[] args){
        
        int arr[] = new int[10];
        
        int i, j, num;
        
        Scanner sc = new Scanner(System.in);

        System.out.println("請輸入排序的9個數:");
        
        for(i = 0; i < arr.length - 1; i++){
            
            arr[i] = sc.nextInt();
        }
        
        System.out.print("請輸入要插入的數字:");
        num = sc.nextInt();
        
        for(i = 0; i < arr.length - 1; i++){
            
            if(num < arr[i]){
                
                for(j = arr.length-1; j > i; j--)
                    
                    arr[j] = arr[j - 1];
                    break;
                
            }
        }
                
        arr[i] = num;

        System.out.println("排序後為:");
            
        for(i = 0; i < arr.length; i++){
                
            System.out.print(arr[i] + " ");

        
        }
    }
}

 

這是小弟看到的程式碼但想不通畫線的地方,希望能獲得各為前輩的解釋及教導,謝謝!

数组里面开始存了九个数字最大下标为8 循环找到要插入的点就是i当时的位置为下标,但是要把现有的 从i位置开始一直到最后的值全部往后移 就是j从数组长度9开始 也就是第十个数,最后循环外边从i的位置把数子插入进去

你划线的地方,就是把你插入的数(下面用n)找到比n大的第一个的角标 i(你的数组已经是有序的了),然后把i开始的数字往后面移动一位,最后把n 赋值给arr[i]

// 第一遍 初始
arr = {1, 2, 3, 4, 6, 7, 8, 9, 10, 0}
// 循环找到要插入5 需要在下标为4的地方插入 但是现在下标为4-8都有值 所以需要把4-8的值挪到5-9也就是j的循环从数组的长度开始 每一次循环相当于
arr = {1, 2, 3, 4, 6, 7, 8, 9, 0, 10}
arr = {1, 2, 3, 4, 6, 7, 8, 0, 9, 10}
arr = {1, 2, 3, 4, 6, 7, 0, 8, 9, 10}
....
arr = {1, 2, 3, 4, 0, 6, 7, 8, 9, 10}
// 最后全部挪动完毕之后 跳出j的循环, i的数字还在本次循环也就是值\下标为4 在这个位置把num插入进去
arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}