希尔排序(Shell Sort)是一种改进的插入排序算法。它将待排序的数组按照一定的间隔分组,然后对每组进行插入排序,逐渐缩小间隔直到间隔为1,最终对整个数组进行一次插入排序。希尔排序的时间复杂度取决于选取的间隔序列,通常是O(nlogn)。
希尔排序的基本步骤如下:
- 选择一个增量序列,通常是通过n/2不断缩小得到的。
- 对数组按照增量序列进行分组,对每组进行插入排序。
- 逐渐缩小增量序列,重复步骤2,直至增量为1。
- 对整个数组进行一次插入排序。
希尔排序的优点:是在初始阶段可以较快地将大的元素移动到合适的位置,从而减少后续的比较次数。
#希尔排序
#定义了一个名为 shell_sort 的函数
def shell_sort(nums):
# 计算输入列表的长度 n
n = len(nums)
# 初始化增量 gap 为 n 的一半。
gap = n // 2
# 表示当增量 gap 大于0时,执行循环内的操作。
while gap > 0:
#是一个循环,遍历从增量 gap 到列表长度 n 的所有元素。
for i in range(gap, n):
# 用于暂存当前元素的值。
temp = nums[i]
# 初始化一个指针 j,用于在子列表中进行比较和插入操作。
j = i
# 是一个循环,用于在子列表中找到合适位置插入当前元素。
while j >= gap and nums[j - gap] > temp:
# 将元素往后移动,为当前元素腾出位置。
nums[j] = nums[j - gap]
# 更新指针位置,继续向前比较。
j -= gap
# 将当前元素插入到正确的位置。
nums[j] = temp
#缩小增量,逐步接近最终的插入排序。
gap //= 2
return nums
# 测试示例
# 定义了一个列表
nums = [50, 36, 72, 23, 14]
# 调用 shell_sort 函数对该列表进行排序,并将排序后的结果打印输出。
sorted_nums = shell_sort(nums)
print(sorted_nums)