栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

希尔排序----python

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

希尔排序----python

希尔排序
  • 1. 插入排序
  • 2. 希尔排序
  • 3. 代码实现

1. 插入排序

先来复习一下插入排序,类似于我们打牌时手中的牌,当我们摸一张牌的时候都会将这一张牌按照顺序插入到一个合适的位置。

a = [7,5,9,2,1,8,3]
print('排序前:',a)

for i in range(1,len(a)):   # 第i个数(从第二个数开始)
    for j in range(i-1,0,-1): # 和i之前的每一个数进行比较
        if a[j] < a[j-1]:   # 如果第 i 个数 小于i之前的数,交换位置
            temp = a[j]
            a[j] = a[j-1]
            a[j-1] = temp
        else:
            break
    print(a)
print('排序后:',a)
2. 希尔排序

希尔排序也被称为缩小增量排序。可以理解为是插入排序的的一种更高效的实现。

希尔排序思路: 将要排序的列表分成多组子序列,将这些子序列进行排序

1.首先取列表长度整除2(初始每组元素距离gap),并且每个元素之间的距离为gap,然后将这个子序列进行插入排序
2.取第二个元素距离gap,在上一次的gap整除2,然后进行排序
3. 一直重复这个过程,后面的gap都是在上一次的gap的基础上整除2,直到gap等于1


当gap等于4时

当gap等于2时


当gap等于1时

3. 代码实现
def insert_sort(li):
    # 初始每组相邻元素之间的距离
    gap = len(li) // 2
    while gap > 0:
        print('gap:', gap)
        for i in range(gap, len(li)):
            temp = li[i]
            j = i - gap
            # 各组进行排序
            while j >= 0 and temp < li[j]:
                li[j + gap] = li[j]
                j = j - gap
            li[j + gap] = temp
            print(li)
        # 新相邻元素之间的距离
        gap //= 2


a = [7, 8, 4, 6, 1, 5, 9, 2, 3]

print('排序前:', a)

insert_sort(a)
print('排序后:', a)
def shell_sort(a):
    n = len(a)
    gap = n // 2
    while gap > 0:
        print('gap:',gap)
        for i in range(gap, n):
            for j in range(i, gap - 1, -gap):
                if a[j] < a[j - gap]:
                    a[j], a[j - gap] = a[j - gap], a[j]
                else:
                    break
            print(a)
        gap //= 2
    return a


a = [7, 8, 4, 6, 1, 5, 9, 2, 3]
print('排序前:', a)
shell_sort(a)
print('排序后:', a)
def insert_sort_gap(a, gap):
    for i in range(gap, len(a)):
        temp = a[i]
        j = i - gap
        while j >= 0 and temp < a[j]:
            a[j + gap] = a[j]
            j = j - gap
        a[j + gap] = temp
        print(a)


def shell_sort(a):
    d = len(a) // 2
    while d >= 1:
        print('ngap:', d)
        insert_sort_gap(a, d)
        d //= 2
        print(a)


a = [7, 8, 4, 6, 1, 5, 9, 2, 3]
print('排序前:', a)
shell_sort(a)
print('排序后:', a)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/977998.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号