插入排序的方法就類似於:在鬥地主發牌時,一張張牌地拿起並插入到自己手中的牌堆中。
假設陣列 arr 有n個無序元素。
每一次的插入就是在區間 [0,i] 中找到 arr[i+1] 對應的位置並插入。 [0,i] 就相當於我們手中牌堆,arr[i+1] 就相當於下一張要插入的牌。直到沒有下乙個要插入的數,該陣列就變得有序了。
第1次將 arr[1] 插入到 [0,0] 區間的正確位置
第2次將 arr[2] 插入到 [0,1] 區間的正確位置
…第i次將 arr[i] 插入到 [0,i-1] 區間的正確位置
…第n-1次將 arr[n-1] 插入到 [0,n-2] 區間的正確位置
因為我在實現的時候使用的是陣列,而在陣列的插入操作中需要從插入位置開始,對區間內後面的所有元素進行一次後移,所以在內迴圈的時候,從 arr[i] 處開始向前遍歷,每遇到乙個大於 arr[i] 的數就交換,直到下乙個數不大於 arr[i] 為止。如果資料結構是鍊錶的話就直接遍歷找到對應位置直接插入就行。
@override
public
void
sort
(int
arr)}}
}
沒進行一次交換,陣列中元素倒置的數量就會減一,當倒置數量變為0的時候,陣列有序。因此所需要交換的次數就是陣列中元素倒置的數量,也就是說,陣列中只有幾個元素位置不正確的時候,該排序方法需要交換的次數就越少,效率也越高。
在原陣列的空間上進行交換,所以空間複雜度為 o(1)。
排序演算法 插入排序演算法
插入排序 insertion sort 演算法通過對未排序的資料執行逐個插入至合適的位置而完成排序工作。日常生活中人們整理橋牌的方法是一張一張的來,將每一張牌插入到其他已經有序的牌中的適當位置。和選擇排序演算法一樣,當前索引左邊的所有元素都是有序的,但它們的最終位置還沒有確定,為了給更小的元素騰出空...
排序演算法 插入排序
插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in place排序 即只需用到o 1 的額外空間的排序 因而在從後向前掃瞄過程中,需要反覆把已排...
排序演算法 插入排序
排序演算法之插入排序 參照新版程式 下面是錯誤的理解,正確的參考,後文已經修改過的部分。選擇排序,顧名思義,就是選擇乙個元素進行排序。原理 將原始序列分成兩部分,一部分已經有序,一部分無序。將無序中的元素逐個插入到有序序列中。這個也是兩層迴圈,就我個人理解,與氣泡排序是乙個原理。氣泡排序是每次都從無...