一、思想
把n個待排序的元素看成一個有序表和一個無序表,開始時有序表中只有一個元素,無序表中包含有n-1個元素,排序過程中每次從無序表中取出第一個元素,把它的排序依次將有序元素的排序碼進行比較,將它插入到有序表中的適當位置,使之成爲新的有序表。
第1趟排序後的數組:
[101, 34, 119, 1]
第2趟排序後的數組:
[34, 101, 119, 1]
第3趟排序後的數組:
[34, 101, 119, 1]
第4趟排序後的數組:
[1, 34, 101, 119]
二、代碼
public static void insertSort(int[] arr) {
//第1輪 {101, 34, 119, 1}-> {34,101, 119, 1}
for (int i = 0; i < arr.length; i++) {
//定義待插入的數
int insertVal = arr[i];
//即待插入的數的前面的數的下標
int insertIndex = i - 1;
//1.insertIndex >= 0 保證在給insertVal找插入位置,不越界
//2.insertVal < arr[insertIndex] 說明待插入的數,還沒有找到插入的位置
//3.所以需要將arr[insertIndex]後移
while (insertIndex >= 0 && insertVal < arr[insertIndex]) {
arr[insertIndex + 1] = arr[insertIndex];
insertIndex --;
}
//當退出while循環時,說明插入的位置找到,insertIndex + 1
if(insertIndex + 1 != i) {
arr[insertIndex + 1] = insertVal;
}
System.out.println("第"+ (i + 1) +"趟排序後的數組:");
System.out.println(Arrays.toString(arr));
}
}