您好,登錄后才能下訂單哦!
直接插入排序,就像是桌子上一疊正面向下的撲克從小到大地依次拿到自己的手上。
1,顯然拿到的第一張撲克(假如是3)是不用比較的,而且可以認為,它是有序的。
2,拿到第二張牌(假如是2)的時候,我們只要和第一張比較,放到合適的位置(現在是2,3),保持有序。
3,接著拿到第三張牌,我們只要和原來有序的序列(2,3)比較組成一個元素加一個的新有序序列即可。
(我們只要從右到左用在原序列一個個比較即可,如是5,只比較一次就可以決定放在3前,如果是1,那就比較兩次)
詳解如下圖:
要點:
1,大循環從第二個元素開始,倒著比較
2,小循環的條件有兩種情況
3,i在一趟比較的最后要加1,向后一格置入新元素
特征:
1,插入排序是原址排序,最多用了一個輔助空間來放臨時元素
2,新元素之前的部分是本問題的子問題的求解結果
3,完全逆序的比較性能最差(內層循環的次數最多)
for(j=1 ; j< arr.length ; j++)
{
key = arr[ j] ;//取出當前要插入比較的新元素
i = j-1;//小循環指示器
while( i> -1 && arr[i]>key) {//小循環負責在已經有序的部分中找個合適的位置
arr[i+1] = arr [i] ;//有序部分比新來元素較大者后移
--i;//繼續向前尋找位置
}
i=i+1;
arr[i] = key;//無論是否進入了小循環,把key放在i+1的位置總是對的
//沒有進入小循環的i和j是同一個位置
}
本文已完結;
by mengshengneng@163.com
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。