溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

一種簡單的直接插入排序精解

發(fā)布時間:2020-06-25 15:44:42 來源:網(wǎng)絡 閱讀:524 作者:小沄 欄目:開發(fā)技術

    直接插入排序,就像是桌子上一疊正面向下的撲克從小到大地依次拿到自己的手上。

1,顯然拿到的第一張撲克(假如是3)是不用比較的,而且可以認為,它是有序的。

2,拿到第二張牌(假如是2)的時候,我們只要和第一張比較,放到合適的位置(現(xiàn)在是2,3),保持有序。

3,接著拿到第三張牌,我們只要和原來有序的序列(2,3)比較組成一個元素加一個的新有序序列即可。

(我們只要從右到左用在原序列一個個比較即可,如是5,只比較一次就可以決定放在3前,如果是1,那就比較兩次)

詳解如下圖:


一種簡單的直接插入排序精解


要點:

1,大循環(huán)從第二個元素開始,倒著比較

2,小循環(huán)的條件有兩種情況

3,i在一趟比較的最后要加1,向后一格置入新元素

特征:

1,插入排序是原址排序,最多用了一個輔助空間來放臨時元素

2,新元素之前的部分是本問題的子問題的求解結果

3,完全逆序的比較性能最差(內(nèi)層循環(huán)的次數(shù)最多)


for(j=1 ;  j< arr.length ; j++)

{

        key = arr[ j] ;//取出當前要插入比較的新元素

        i = j-1;//小循環(huán)指示器

        while( i> -1 && arr[i]>key) {//小循環(huán)負責在已經(jīng)有序的部分中找個合適的位置

                arr[i+1] = arr [i] ;//有序部分比新來元素較大者后移

                --i;//繼續(xù)向前尋找位置

        }

        i=i+1;

        arr[i] =  key;//無論是否進入了小循環(huán),把key放在i+1的位置總是對的

  //沒有進入小循環(huán)的ij是同一個位置

}



本文已完結;

by mengshengneng@163.com

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI