#!/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的為乙個組。...