一、希尔排序简介
希尔排序(Shell's Sort),也被称为递减增量排序算法(Diminishing Increment Sort),是插入排序的一种更高效的改进排序算法。
在希尔排序算法中,我们将数组 h 排序为较大的 h 值。我们不断减小 h 的值,直到它变为 1。如果对每个 h\'th 元素的所有子列表进行排序,则称数组为 h 排序。
二、实现希尔排序的Python代码
希尔排序是对插入排序算法的优化。希尔排序最初以较大的间隔对元素进行排序,逐渐减小间隔大小。该代码定义了将数组 arr 作为输入的 shellSort 函数。它将间隙大小初始化为数组长度的一半。该算法在每个区间内执行修改后的插入排序,逐渐减小间隙。元素被比较并移动到正确的位置。驱动程序代码初始化数组,应用 shellSort 函数,并打印原始数组和排序数组。该算法的时间复杂度取决于所选的间隙序列,与插入排序相比,性能更高。
# 希尔排序 for python
def shellSort(arr):
# 从一个大的间隙开始,然后缩小间隙
n = len(arr)
gap = n/2
#对此间隙大小执行间隙插入排序。
#第一间隙元件a[0..gap-1]已经处于间隙中
#继续添加一个元素,直到整个数组
#间隙已排序
while gap > 0:
for i in range(gap,n):
# 将a[i]添加到已进行间隙排序的元素中
# 保存 a[i] in temp ,在位置i处,make a hole
temp = arr[i]
# shift earlier gap-sorted elements up until the correct
# location for a[i] is found
j = i
while j >= gap and arr[j-gap] >temp:
arr[j] = arr[j-gap]
j -= gap
# put temp (the original a[i]) in its correct location
arr[j] = temp
gap /= 2
# 驱动代码测试
arr = [ 12, 34, 54, 2, 3]
n = len(arr)
print ("Array before sorting:")
for i in range(n):
print(arr[i]),
shellSort(arr)
print ("\nArray after sorting:")
for i in range(n):
print(arr[i]),
输出
Array before sorting:
12 34 54 2 3
Array after sorting:
2 3 12 34 54
时间复杂度:O(n2)
辅助空间:O(1)