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}