希爾排序思想:
算法先將要排序的一組數按某個增量d分成若干組,每組中記錄的下標相差d.對每組中全部元素進行排序,然后再用一個較小的增量對它進行,在每組中再進行排序。當增量減到1時,整個要排序的數被分成一組,排序完成。
一般的初次取序列的一半為增量,以后每次減半,直到增量為1。
def
shell_sort
(
list
)
:
n
=
len
(
list
)
gap
=
n
//
2
new_list
=
[
]
while
gap
>
1
:
for
i
in
range
(
gap
)
:
if
list
[
i
]
>
list
[
i
+
gap
]
:
list
[
i
]
,
list
[
i
+
gap
]
=
list
[
i
+
gap
]
,
list
[
i
]
gap
=
gap
//
2
;
if
gap
==
1
:
for
j
in
range
(
n
)
:
if
j
==
0
:
new_list
.
append
(
list
[
j
]
)
else
:
new_list
.
append
(
list
[
j
]
)
for
k
in
range
(
j
,
0
,
-
1
)
:
if
new_list
[
k
]
<
new_list
[
k
-
1
]
:
new_list
[
k
]
,
new_list
[
k
-
1
]
=
new_list
[
k
-
1
]
,
new_list
[
k
]
return
new_list
if
__name__
==
'__main__'
:
a
=
[
58
,
89
,
56
,
3
,
4
,
5
,
79879
,
263536
,
45215
,
4543
]
b
=
shell_sort
(
a
)
print
(
b
)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
