**:
#coding:utf-8
#author:徐卜靈
#希爾排序的實質就是分組插入排序,該方法又稱縮小增量排序,因dl.shell於2023年提出而得名。
#希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。
#希爾排序是基於插入排序的以下兩點性質而提出改進方法的:
#插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率
#但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位
l = [1, 3, 2, 32, 5, 4]
defshell_sort(l):
step = len(l)/2
while step >0:
for i in range(step,len(l)): #
在索引為step到len(l)上,比較l[i]和l[i-step]的大小
while(i >= step and l[i] < l[i-step]): #
這裡可以調整step從小到大或者從大到小排列
l[i],l[i-step] = l[i-step],l[i]
i -=step
step /= 2
lshell_sort(l)
#別人的希爾排序**
#引用**:
#def shellsort(nums):
## 設定步長
#step = len(nums)/2
#while step > 0:
#for i in range(step, len(nums)):
## 類似插入排序, 當前值與指定步長之前的值比較, 符合條件則交換位置
#while i >= step and nums[i-step] > nums[i]:
#nums[i], nums[i-step] = nums[i-step], nums[i]
#i -= step
#step = step/2
#return nums##
#if __name__ == '__main__':
#nums = [9,3,5,8,2,7,1]
#print shellsort(nums)
這個演算法不難理解,但在寫程式的時候還是遇到了小小的麻煩。主要體現在它的時間複雜讀為o(n ** 1.3 )好奇怪的時間複雜度。
所以,在一次排序中,l[i]和l[i-step]的比較,一直迴圈到本組的第乙個元素。
還需要注意一點是的索引是從step開始的。
時間複雜度最壞情況是o(n ** 2)
空間複雜度o(1)
並不是乙個穩定的排序演算法。
八大排序演算法python實現
1.氣泡排序 氣泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,故名。步驟 比較相鄰的元素。如果第乙個比第二個大,就交...
八大排序演算法
1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void shell ...
八大排序演算法
一 概述 八大排序演算法包括 1 插入排序之直接插入排序 straight insertion sort 2 插入排序之希爾排序 shells sort 3 選擇排序之簡單選擇排序 selection sort 4 選擇排序之堆排序 heap sort 5 交換排序之氣泡排序 bubble sort...