python之希爾排序演算法實現

2021-09-25 20:25:21 字數 1021 閱讀 6816

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:richard_kong

"""希爾排序(shell sort)是插入排序的一種,也稱為縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。希爾排序是非常穩定的排序演算法

希爾排序是把記錄按下錶的一定增量分組,對每組使用直接插入排序演算法排序,隨著增量逐漸減少,每組包含的關鍵字越來越多,當增量

減值1時,整個檔案恰被分成一組,演算法便終止

希爾排序的基本思想是: 將陣列列在乙個表中,並對列分別進行插入排序,重複這個過程,不過每次用更長的列來進行,最後整個表就只有一列了

將陣列轉換為表是為了更好的理解演算法,演算法本身還是使用陣列進行排序

間隔叫gap

實際就是隊插入排序的優化版本,將序列先處理一下然後再進行插入排序

""""""當gap為1時就相當於插入排序了"""

import math

def shell_sort(alist):

n = len(alist)

# 初始步長,向上取整

gap = int(n/2)

while gap > 0:

# 按步長進行插入排序

for i in range(gap,n):

temp = alist[i]

j = i

# 插入排序 就是講第乙個 和第gap+1個元素比較,如果小於 則互換

while j >= gap and alist[j-gap] > temp:

alist[j] = alist[j-gap]

j -= gap

alist[j] = temp

gap = int(gap / 2)

print(gap)

alist = [12,21,1,2,3,4,23,121,234,5,6,32,78,9887,9,11]

shell_sort(alist)

print(alist)

排序演算法 python實現希爾排序

coding utf 8 希爾排序,穩定性 是不穩定的 defshell sort alist n len alist gap n 2 取步長,總長度除2,取整數 i gap for i in range gap,n i gap,gap 1,gap 2,gap 3 n 1 while if alis...

排序演算法之python希爾排序

希爾 shell 排序是一種插入排序,同時也叫縮小增量排序,算是直接插入排序的乙個優化演算法,以其設計者希爾 donald shell 的名字命名,該演算法由 1959 年公布。將待排序列以一定的步長分成子串行,把子序列進行排序,然後會繼續以更小的步長進行分子序列,並將子串行排序,最終演算法以步長為...

排序演算法之希爾排序 java實現

希爾排序 在直接插入排序的基礎上進行的優化,直接插入排序在n值小的時候效率比較高,在n很大的時候如果待排序序列基本有序,效率依然很高,時間效率可以提公升為o n 希爾排序也稱之為縮小增量排序。1.先選取乙個小於n的整數d 步長 然後按照步長d將待排序序列分為d組,從第乙個記錄開始間隔為d的為乙個組。...