一、核心思想
抽出一個(gè)元素,在其前面的元素中找到適當(dāng)?shù)奈恢眠M(jìn)行插入。
插入排序法:所謂插入排序法乃是將一個(gè)數(shù)目插入該占據(jù)的位置。
假設(shè)我們輸入的是 “53,27,36,15,69, 42” 我們從第二個(gè)數(shù)字開始,這個(gè)數(shù)字是27,我們的任務(wù)只要看看27有沒有正確的位置,我們的做法是和這個(gè)數(shù)字左邊的數(shù)字來比,因此我們比較27和53,27比53小,所以我們就交換27和53,原來的排列就變成了“27, 53, 36, 15, 69, 42 ”
接下來,我們看第3個(gè)數(shù)字有沒有在正確的位置。這個(gè)數(shù)字是36,它的左邊數(shù)字是53,36比53小,所以我們將36和53交換,排列變成了 “27,36, 53, 15, 69, 42 "我們必須繼續(xù)看36有沒有在正確的位置,36的左邊是27,27比36小,36就維持不動(dòng)了,這時(shí)候排序還是“27, 36, 53, 15, 69, 42 "。
再來看第四個(gè)數(shù)字,這個(gè)數(shù)字是15,我們將15和它左邊的數(shù)字相比,都比15大,所以就將15一路往左移動(dòng),這時(shí)候排序變成了 “15, 27, 36, 53, 69, 42 ”。
再來看第五個(gè)數(shù)字,這個(gè)數(shù)字是69,我們將69和它左邊的數(shù)字相比,都比69小,所以就69維持不動(dòng)了,這時(shí)候排序變成了 “15, 27, 36, 53, 69, 42 ”
最后,我們檢查第六個(gè)數(shù)字,這個(gè)數(shù)字是42,42必須往左移,一直移到42的左邊是36為止,所以我們的排列就變成了 “15, 27, 36, 42 ,53, 69”排序因此完成了。

二、源碼
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;
// 要插入的數(shù)據(jù)
long insertNode;
// 從數(shù)組的第二個(gè)元素開始循環(huán)將數(shù)組中的元素插入
for (i = 1; i < array.length; i ++) {
// 設(shè)置數(shù)組中的第二個(gè)元素為第一次循環(huán)要插入的數(shù)據(jù)
insertNode = array[i];
j = i - 1;
// 若要插入的元素小于第j個(gè)元素,則將第j個(gè)元素向后移動(dòng)
while ((j >= 0) && insertNode < array[j]) {
array[j + 1] = array[j];
j --;
}
// 直到要插入的元素不小于第j個(gè)元素,將insertNode插入到數(shù)組中
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初學(xué)者學(xué)習(xí)交流群】:458430385
-
微信公眾號(hào)【Java碼農(nóng)社區(qū)】
img 今日頭條號(hào):編程界的小學(xué)生
