Python 希尔排序 1 l# o7 J+ w3 n/ ^- g% r5 P4 i) O希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 . x2 S, t7 g( ?: {( l* W希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。! a* a6 K% }$ y) C, H3 C, I & _4 g) a& J& W" W* y7 D
2 l V0 p( V, q7 F" ~: L* ^1 M
def shellSort(arr): 5 O- j8 J. g# s1 N
% D/ v- M8 A6 V6 l y
n = len(arr)7 U/ i( \6 b% [' |8 ?7 }1 \
gap = int(n/2)0 k! Y& F& P% r2 Y5 u
. M ~" C8 V: c0 u7 j# o9 H' [ while gap > 0: + l7 O1 v- T s2 B. @ ( U ~4 \1 y0 o \% Y for i in range(gap,n): * H1 W$ @% T& Q
, U) J9 _3 A" I1 |% }* f temp = arr 9 _( Q% M1 D0 P6 ?$ J
j = i 3 T7 m6 e. g& `7 H5 I# f- t* f while j >= gap and arr[j-gap] >temp: ) \2 W2 H/ M% n4 z# i4 F arr[j] = arr[j-gap] 1 `, D# e2 U L* S
j -= gap - _2 d& u' \! @' W
arr[j] = temp 7 @( E/ m1 c% b8 Y
gap = int(gap/2) 9 g1 U# Y# r9 n8 S ) ~$ U2 X H2 T* o7 w# Earr = [ 12, 34, 54, 2, 3] ) F$ X1 w5 z. e, P9 s7 D: X
& L. f, N; r+ J3 W0 S0 Tn = len(arr) + O; S" H. {- t) L, l) `1 z
print ("排序前:") & e. E0 c/ ]. u; [9 p3 B. L
for i in range(n): & r, r& i5 p5 A/ D( p
print(arr), W# W+ B/ Y! }4 E# s" m% T }; [5 u. _- y: U
shellSort(arr) . a) P3 @ A+ I2 B4 ]
+ O: p' @5 p" u8 ]9 P6 cprint ("\n排序后:") 6 e/ e9 z4 Q1 r, t' [/ [8 ^" kfor i in range(n): r, w- d# T& E' j
print(arr), 4 C6 Y. i5 N8 c8 _% o% Q' z* x0 }
执行以上代码输出结果为: 1 t% T% I( J5 g, y. D& |5 p5 y% R6 L6 C! f 排序前:12 ' X! Y: Z- L" _1 K% G' \. f. i6 V346 ~6 z& K4 I( i/ H L, L7 B
54: K" }6 x" p/ U, L/ u6 X/ N- z. ^
2/ [* ?3 T% W1 B: a$ j' H( u2 }
3( r- l% f) X, d6 d, | o$ u- u9 D0 A
6 J: _( W, A D: s# r& m, r' M
排序后:( j4 u) M+ B2 Q" y+ O
2 $ q( G: _0 H! U! l2 H4 f7 G3 y) _) ~! K8 X* ?$ U12" m5 V2 x: O3 f1 Q$ J; |% X
349 U$ ?* Z R# d; D
54 7 j7 S8 C) \5 [& Q! Z ; U" U! `) K% Q8 Z3 i , R1 _3 S4 n b6 d " f1 K' P D1 D) o/ G" c1 y+ Q( d* b& m* b* W2 l7 P