#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:Richard_Kong
"""
希尔排序(Shell Sort)是插入排序的一种,也称为缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非常稳定的排序算法
希尔排序是把记录按下表的一定增量分组,对每组使用直接插入排序算法排序,随着增量逐渐减少,每组包含的关键字越来越多,当增量
减值1时,整个文件恰被分成一组,算法便终止
希尔排序的基本思想是: 将数组列在一个表中,并对列分别进行插入排序,重复这个过程,不过每次用更长的列来进行,最后整个表就只有一列了
将数组转换为表是为了更好的理解算法,算法本身还是使用数组进行排序
间隔叫gap
实际就是队插入排序的优化版本,将序列先处理一下然后再进行插入排序
"""
"""当gap为1时就相当于插入排序了"""
import math
def shell_sort(alist):
n = len(alist)
# 初始步长,向上取整
gap = int(n/2)
while gap > 0:
# 按步长进行插入排序
for i in range(gap,n):
temp = alist[i]
j = i
# 插入排序 就是讲第一个 和第gap+1个元素比较,如果小于 则互换
while j >= gap and alist[j-gap] > temp:
alist[j] = alist[j-gap]
j -= gap
alist[j] = temp
gap = int(gap / 2)
print(gap)
alist = [12,21,1,2,3,4,23,121,234,5,6,32,78,9887,9,11]
shell_sort(alist)
print(alist)