原理
1.定義一個指針,將指針指向某個元素(一般指向第二個),然后把以這個元素為基準(zhǔn),將整個數(shù)組分成兩個部分,左側(cè)視為新數(shù)組,右側(cè)視為原數(shù)組
2.將此元素抽取出來,然后按照從右向左的順序分別與其左邊的元素比較,遇到比此元素大的就把這個大的元素向右移,直到遇到比它小的元素或者它左邊元素都比它大停止
3.此時會出現(xiàn)一個空位,將此元素插入到這個位置,此時新數(shù)組中它左側(cè)元素都比它小,右側(cè)都比它大
4.將指針右移一位,重復(fù)上述過程,每循環(huán)一輪,新數(shù)組就多一個,原數(shù)組就少一個,最后只剩下有序的新數(shù)組
舉例分析
對我來說圖形分析比文字分析更容易理解,我在YouTube上看到一個不錯的視頻,搬運了一下,大家可以觀看一下https://www.bilibili.com/video/av35233196/
源碼實現(xiàn)
for(int i=1;i<arr.length;i++){
int temp = arr[i];
int leftIndex = i - 1;
while(leftIndex >= 0 && arr[leftIndex] > temp){
arr[leftIndex+1] = arr[leftIndex];
leftIndex--;
}
arr[leftIndex+1] = temp;
}