. l! n: z7 \; s9 w3 ~9 y, N下面是使用Python编写的希尔排序代码实现: 6 f' p3 e9 H. T, Ndef shell_sort(arr): L- {0 d; h' L3 b
n = len(arr)+ V6 l/ h# c7 [3 m8 X4 r
gap = n // 2 # 初始化步长为数组长度的一半5 u: n' a+ O! c. y1 {
& v# C3 a: b. U; R5 R6 y while gap > 0: + _6 u1 G% z2 j# |/ ]( U6 j6 n+ P1 _ for i in range(gap, n): 7 f7 [( K: M$ X temp = arr[i] # 当前待插入元素/ ^+ [+ m; `9 P8 Y. Y( `8 b8 w
j = i ' L; g" k4 R+ _# A& ~ $ x W" c9 X: z, x2 n while j >= gap and arr[j - gap] > temp: : k+ Z" J9 U9 Z3 `. Q arr[j] = arr[j - gap] # 后移元素 ' J- A" k9 \8 Y j -= gap# J4 B. _8 F/ C/ X) ?# b$ w0 I( S4 S
& Z: M) f8 f) @( o; A& `
arr[j] = temp # 插入元素到正确位置 : Y) h" n# d) u7 |5 G1 I1 e4 G$ P0 w% `) z0 p! I/ Y
gap //= 2 # 缩小步长 + _' i; v1 v; Q4 d7 J5 a( _( y# g6 I0 o4 _
return arr % w: E; A8 Z( f0 K- k) O- Q. K& H/ n$ Z; d
你可以调用 shell_sort 函数并传入待排序的列表,函数将返回排序后的列表。 ; {2 z$ Q O+ E5 L9 x% w希尔排序的时间复杂度取决于选定的步长序列,最优的步长序列可以达到 O(n log^2 n),但并不容易确定最优的步长序列。希尔排序相对于其他排序算法具有一定的优势,但在某些特殊情况下可能性能不如快速排序、归并排序等算法。 5 m4 o7 g! O( I' F # ^ v1 \! d6 ~, u, O0 D! L+ G: l! {' R+ E! G: ~3 s$ @( w