希尔排序思想:
算法先将要排序的一组数按某个增量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
)