python之希尔排序算法实现

#!/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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值