數據結構:希爾排序算法,詳解,圖解 -- 數據結構算法集

希爾排序算法

希爾排序算法

希爾排序算法是在插入排序的基礎上進行的改進,比插入排序更高效,是插入排序的一種,又叫‘縮小增量排序’。

希爾排序是把數組按下標的一定增量分組,對每組使用直接插入排序算法排序;
隨着增量逐漸減少,每組包含的元素越來越多,當增量減至1時,整個文件恰被分成一組,算法便終止

對比插入排序

希爾排序是按照不同步長對元素進行插入排序,當剛開始元素很無序的時候,步長最大,所以插入排序的元素個數很少,速度很快;當元素基本有序了,步長很小,插入排序對於有序的序列效率很高

增量:兩個元素之間的下標差

圖解

相同顏色的元素爲一組,圖中的跨度即爲增量,
在這裏插入圖片描述

代碼實現

python2.7.5

# _*_ encoding:utf-8 _*_


# 希爾排序算法
def shell_sort(lists):
	step = len(lists) // 2			# 增量:兩個元素之間的下標差
	while step >= 1:				# 增量大於等於1,爲0時,算法結束
		for i in range(0,step):		# 按照增量分組的數量,增量長度即爲分組數量
		# i爲每組元素的起始元素的下標
			# 下面就是插入排序的實現
			for index in range(i+step,len(lists),step):		# 每組增量數據的下標,從第二個元素開始
				for j in range(index,0,-step):
					if lists[j] < lists[j - step]:
						lists[j], lists[j - step] = lists[j - step], lists[j]
					else:
						break
		step //= 2
	return lists


lt = [3,5,10,6,2,9,4]
print shell_sort(lt)

結果
在這裏插入圖片描述

文章中有不足之處請多多指教,歡迎討論,共同學習,共同進步

參考:
https://blog.csdn.net/qq_39207948/article/details/80006224

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章