八大排序演算法的python實現(二)希爾排序

2022-07-20 07:06:08 字數 1378 閱讀 4318

**:

#

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

print

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...