倒序排序 詳解插入排序

2021-10-25 12:38:34 字數 1216 閱讀 4919

插入排序(insertion sort)的過程就像我們排序撲克牌一樣(從左到右,從小到大)。開始時我們左手為空,然後我們從桌子上拿起一張牌並將它插入到左手中正確的位置,為了找到這個位置,我們將這張牌與左手中從右向左的每張牌進行比較,直到找到比它小或相等的牌的後面。

與排序撲克牌類似,插入排序的原理是將陣列中的資料分為兩個區間,已排序區間和未排序區間。初始已排序區間只有乙個元素,就是陣列的第乙個元素,接著取未排序區間中的元素(陣列的第二個元素),在已排序區間中找到合適的插入位置將其插入,並保證已排序區間資料一直有序,重複這個過程,直到未排序區間中元素為空。

排序前:4, 6, 3, 5, 2, 1

排序後:1, 2, 3, 4, 5, 6

演算法過程

1、從第乙個元素開始,該元素可以認為已經排序;

2、取出下乙個元素,在已排序區間中倒序遍歷;

3、如果已排序元素大於新元素,將已排序元素移動到下乙個位置;

4、繼續向前遍歷,重複上一步驟直到找到已排序的元素小於或等於新元素,將新元素插入已排序元素的後面;

5、重複2-4步驟。

為了便於大家理解,我畫了張圖

**實現

public class insertionsort         for(int i = 1; i < len; i++)  else             }            // 待排序元素的位置            arr[j+1] = item;        }    }}
總結

1、插入排序的時間複雜度是多少?

如果要排序的資料已經是有序的,如果我們是在已排序區間倒序遍歷查詢,每次只需要比較乙個資料就能確定插入的位置。所以在這種情況下,最好的時間複雜度為o(n)(注意,這裡是倒序遍歷)。

如果要排序的資料剛好是相反的,每次插入都相當於在陣列的第乙個位置插入新的資料,需要移動大量的資料,所以最壞的時間複雜度為o(n^2)。

2、插入排序的空間複雜度是多少?

從上述實現過程可以看出,插入排序沒有額外的儲存空間,所以它的空間複雜度為o(1)。這是乙個原地排序演算法。

3、插入排序是穩定的排序演算法嗎?

在插入排序中,對於值相同的元素,我們可以將新元素插入到已排序區間元素的後面,這樣就可以保持原有的順序不變,所以插入排序是穩定的排序演算法。

end

排序 時間倒序 排序演算法 插入排序

你一定玩過紙牌,為了使手中的牌變的有序,我們正常人的思維是把摸到的牌插入到對應的位置,你就會得到有序的牌了。在計算機中要給給插入的元素騰空間,需要將其後的元素在插入之前後移一位,這種演算法叫插入排序 1.從第乙個元素開始,該元素認為已經排序 2.取下乙個元素,把該元素與已經排序的元素從右到左邊依次比...

插入排序詳解

有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為o n 2 插...

插入排序詳解

折半插入排序最難理解的地方在於 插入點位置 那麼如何確定插入點的位置呢?while left right else 1 如果p mid 關鍵字則執行right mid 1 此時位置情況 right mid left 所以插入的位置 right後面乙個,即left 2 如果p mid 關鍵字則執行 l...