一、核心思想
抽出一個元素,在其前面的元素中找到適當的位置進行插入。
插入排序法:所謂插入排序法乃是將一個數目插入該占據的位置。
假設我們輸入的是 “53,27,36,15,69, 42” 我們從第二個數字開始,這個數字是27,我們的任務只要看看27有沒有正確的位置,我們的做法是和這個數字左邊的數字來比,因此我們比較27和53,27比53小,所以我們就交換27和53,原來的排列就變成了“27, 53, 36, 15, 69, 42 ”
接下來,我們看第3個數字有沒有在正確的位置。這個數字是36,它的左邊數字是53,36比53小,所以我們將36和53交換,排列變成了 “27,36, 53, 15, 69, 42 "我們必須繼續看36有沒有在正確的位置,36的左邊是27,27比36小,36就維持不動了,這時候排序還是“27, 36, 53, 15, 69, 42 "。
再來看第四個數字,這個數字是15,我們將15和它左邊的數字相比,都比15大,所以就將15一路往左移動,這時候排序變成了 “15, 27, 36, 53, 69, 42 ”。
再來看第五個數字,這個數字是69,我們將69和它左邊的數字相比,都比69小,所以就69維持不動了,這時候排序變成了 “15, 27, 36, 53, 69, 42 ”
最后,我們檢查第六個數字,這個數字是42,42必須往左移,一直移到42的左邊是36為止,所以我們的排列就變成了 “15, 27, 36, 42 ,53, 69”排序因此完成了。
image.png
二、源碼
package com.ctw;
/**
* @author TongWei.Chen 2018-09-26 14:16:52
* @Description:
* @Project sjjg-sf
*/
public class InsertSort {
public static void insertSort(long[] array) {
int i, j;
// 要插入的數據
long insertNode;
// 從數組的第二個元素開始循環將數組中的元素插入
for (i = 1; i < array.length; i ++) {
// 設置數組中的第二個元素為第一次循環要插入的數據
insertNode = array[i];
j = i - 1;
// 若要插入的元素小于第j個元素,則將第j個元素向后移動
while ((j >= 0) && insertNode < array[j]) {
array[j + 1] = array[j];
j --;
}
// 直到要插入的元素不小于第j個元素,將insertNode插入到數組中
array[j + 1] = insertNode;
}
}
public static void main(String[] args) {
MyArray array = new MyArray();
array.add(111L);
array.add(13L);
array.add(31L);
array.add(211L);
array.add(11L);
array.add(12L);
array.add(23L);
array.add(31L);
array.add(41L);
array.add(551L);
insertSort(array.getArr());
array.display();
}
}
三、廣告
-
碼云地址
QQ群【Java初學者學習交流群】:458430385
-
微信公眾號【Java碼農社區】
img 今日頭條號:編程界的小學生