希尔排序(Shell Sort)是一种插入排序的改进版本,它通过将待排序的元素分成若干个小组,对每个小组进行插入排序,逐步缩小小组的间隔,最终完成整个序列的排序。
def shell_sort(arr):
n = len(arr)
gap = n // 2
while gap > 0:
for i in range(gap, n):
temp = arr[i]
j = i
while j >= gap and arr[j - gap] > temp:
arr[j] = arr[j - gap]
j -= gap
arr[j] = temp
gap //= 2
return arr
# 测试示例
arr = [12, 34, 54, 2, 3]
sorted_arr = shell_sort(arr)
print(sorted_arr)
在上面的示例代码中,shell_sort
函数实现了希尔排序的算法。首先确定初始的间隔gap
为数组长度的一半,然后不断地缩小gap
,对每个小组进行插入排序操作,直到gap
为1时完成排序。
希尔排序是一种改进的插入排序算法,其原理如下:
- 首先确定一个增量序列,通常选择的增量序列是n/2, n/4, n/8, ... 1,直到增量为1;
- 根据增量序列,将待排序的序列分成若干个子序列,对每个子序列进行插入排序;
- 逐步缩小增量,重复上述步骤,直到增量为1时,进行最后一次插入排序,完成排序。
希尔排序通过较大的增量先排序,使得序列变得部分有序,然后逐步减小增量,最终完成排序。这种分阶段的排序方式可以提高排序效率。