数据结构Python实现-希尔排序算法

希尔排序是一种改进的插入排序,通过增量序列分组进行排序。初始增量通常为序列长度的一半,每次减半,直至增量为1。文章介绍了希尔排序的思想,并提供了两种不同的Python代码实现,使用while循环和双重for循环控制排序过程。
摘要由CSDN通过智能技术生成

希尔排序的思想

希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的数据放在一起。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量等于1,即所有记录放在同一组中进行直接插入排序为止。该方法实质上是一种分组插入方法。一般的初次取序列的一半为增量,以后每次减半,直到增量为1。即gap=n//2

希尔排序的代码实现

def shell_sort(alist):
    n=len(alist)
    gap=n//2          # 取整除
    while gap > 0:
         for j in range(gap,n):  
             i=j
             while i > 0:
                 if alist[i] < alist[i-gap]:
                     alist[i],alist[i-gap]=alist[i-gap],alist[i]
                     i=i-gap
                 else:
                    break;
         gap=gap//2
    #return alist
                
                
if __name__ =="__main__":
    alist=[0,1,8,7,9,2,10]
    print(alist)
    shell_sort(alist)
    print(alist) 

其中只是把直接插入排序进行了一点点的改进,仅仅改变了交换的步长,比较的是选出来的每一部分而不是一个整体了。此代码是用了while循环。

def shell_sort(alist):
    n=len(alist)
    gap=n//2          # 取整除
    while gap > 0:
         for j in range(gap,n):  
             for i in range(j,0,-gap):
                 if alist[i] < alist[i-gap]:
                     alist[i],alist[i-gap]=alist[i-gap],alist[i]
                 else:
                    break;
         gap=gap//2
    #return alist
                
                
if __name__ =="__main__":
    alist=[0,1,8,7,9,2,10]
    print(alist)
    shell_sort(alist)
    print(alist) 

第二种方法,实现希尔排序,是把直接插入排序改成了两个for循环的格式

关键

用一个while循环进行控制,因为只有gap等于1时循环才会停止,所以,每次比完一次之后,gap就变成原来的一半,while循环来控制gap等于1这个条件,一旦满足条件结束循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值