python算法9.8——希尔排序

# 希尔排序,是插入排序的改进,是将序列分为不同组,逐渐排序、合并、排序完成的
# 基本原理(升序):
# 1.选定增量(组数)
# 2.将序列按照增量间隔,划分为指定组数
# 3.对每一组内部进行直接插入排序
# 4.减少增量,重复2、3,直至增量为1
# 实现过程:确定增量,分组,确定每组元素,将每组元素插入排序
import random
Range = 100
Length = 11


if __name__ == '__main__':
    list = random.sample(range(Range),Length)
    print('before sort:',list)

    gap = Length//2
    while gap > 0:                                  #确定增量
        for i in range(gap):                        #确定组别
            for j in range(i,Length,gap):           #确定组中元素
                for k in range(1,Length//gap):      #实现插入排序
                    for m in range(k,0,-1):
                        if list[m] < list[m-1]:
                            list[m],list[m-1] = list[m-1],list[m]
        gap //=2
    print('after sort:', list)

通用精炼版

import random
Range = 100
Length = 11

list = random.sample(range(Range), Length)    #在指定序列中随机获取指定长度片段
print('before sort:', list)

gap = Length // 2
while gap > 0:
    for j in range(gap, Length):            #实现对每组的首元素之后的元素的插入
        i = j
        while (i - gap) >= 0:               #对每组元素的有序部分实现插入排序
            if list[i] < list[i - gap]:
                list[i], list[i - gap] = list[i - gap], list[i]
                i -= gap
            else:
                break
    gap //= 2



print('after sort:', list)

猜你喜欢

转载自blog.csdn.net/nominior/article/details/82528181