基本思想:
將陣列中的待排序元素和前面排好序的元素做比較,如果選擇的元素和已排序的元素小,就交換,直到所有的元素都比較過。
此演算法需要兩層迴圈:
1、迴圈遍歷待排序的元素;
2、選擇的元素a和 已排序 的所有元素比較。
python實現:
def insertionsort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >=0 and key < arr[j] :
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
插入排序的 最壞時間複雜度 o(穩定排序。
希爾排序也稱之為遞減增量排序,是對插入排序的改進。按前面說,對已經近乎排序好的序列做插入排序,效率很高,可以達到近乎線性。但是插入排序效率也是比較低的,他一次只能將資料向前移一位。比如如果乙個長度為n的序列,最小的元素如果恰巧在末尾,那麼使用插入排序仍需一步一步的向前移動和比較,要n-1次比較和交換。
希爾排序通過將待比較的元素劃分為幾個區域來提公升插入排序的效率。這樣可以讓元素可以一次性的朝最終位置邁進一大步,然後演算法再取越來越小的步長進行排序,最後一步就是步長為1的普通的插入排序的,但是這個時候,整個序列已經是近似排好序的,所以效率高。
希爾步長的選擇:常見的 取 n/2, n/4, ...,1(重複除以2)
python 實現:
def shell_sort(alist):
"""希爾排序
"""n = len(alist)
gap = int(n/2)
#控制gap,gap的最終取值是1
while gap >= 1:
for i in (gap,n):
temp = alist[i]
j = i-gap
while j >= 0 and alist[j] > temp:
alist[j+gap] = alist[j]
j -= gap
a[j+gap] = temp
gap = int(gap/2)
希爾排序是不穩定的一種排序演算法 。 資料結構 插入排序 希爾排序
一 插入排序 1 介紹 插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in place排序 即只需用到o 1 的額外空間的排序 因而在從後向前掃...
資料結構 插入排序 希爾排序
先用簡單的一句話概括,每次用陣列中乙個數字,與他之前的所有資料進行比較,如果滿足條件則更換順序。光這麼說,感覺還是有些晦澀難懂,那我們來舉個例子看看吧,畢竟要學以致用呀,奧利給。1 假設我們現在有乙個陣列 2 那麼我們需要先拿出最前面的兩位 1 進行比較,並且是用最有一位向前進行比較,3 5,那麼交...
資料結構之希爾排序(插入排序)
希爾排序 shell s sort 又稱 縮小增量排序 diminishing increment sort 是插入排序的一種,因d.l.shell於1959年提出而得名。希爾排序的誕生是由於插入排序在處理大規模陣列的時候會遇到需要移動太多元素的問題。希爾排序的思想是將乙個大的陣列 分而治之 劃分為...