4.排序算法(4)

作者: Stone_説 | 来源:发表于2021-01-23 02:24 被阅读0次

1.希尔排序图示

希尔排序.jpg

2.代码实现

lst = [8,4,0,9,2,7,3,1,5]    #测试案例

print('origin',lst)
print('*'*30)

def shell_sort2(arr):
    iter_num = 0
    gap = len(arr)//2  # 初始步长设置为总长度的一半
    while gap >= 1:
        iter_num += 1
        for i in range(gap,len(arr)):
            while i >= gap and arr[i-gap] > arr[i]:  # 在每一组里面进行直接插入排序
                arr[i], arr[i-gap] = arr[i-gap],arr[i]
                i -= gap
        print(iter_num, arr)
        gap = gap // 2  # 更新步长
    return arr

sorted_lst = shell_sort2(lst)
print('*'*30)
print('sorted',sorted_lst)

# 运行结果
origin [8, 4, 0, 9, 2, 7, 3, 1, 5]
******************************
1 [2, 4, 0, 1, 5, 7, 3, 9, 8]
2 [0, 1, 2, 4, 3, 7, 5, 9, 8]
3 [0, 1, 2, 3, 4, 5, 7, 8, 9]
******************************
sorted [0, 1, 2, 3, 4, 5, 7, 8, 9]

附录:另一种思路,方法略有不同

def shell_sort(arr):
    iter_num = 0
    gap = len(arr)//2
    while gap >= 1:
        iter_num += 1
        for i in range(gap,len(arr)):
            while i>0:
                if arr[i] < arr[i-gap]:
                    arr[i],arr[i-gap] = arr[i-gap],arr[i]
                    i -= gap
                else:
                    break
        print(iter_num, lst)
        gap //= 2
    return arr

# 运行结果
origin [8, 4, 0, 9, 2, 7, 3, 1, 5]
******************************
1 [1, 4, 0, 5, 2, 7, 3, 9, 8]
2 [0, 4, 1, 5, 2, 7, 3, 9, 8]
3 [0, 1, 2, 3, 4, 5, 7, 8, 9]
******************************
sorted [0, 1, 2, 3, 4, 5, 7, 8, 9]

相关文章

  • 4.排序算法(4)

    1.希尔排序图示 2.代码实现 附录:另一种思路,方法略有不同

  • 排序算法总结(java)

    目录:一、排序算法说明 1.排序的定义 2.术语解析 3.算法分类 4.比较和非比较的区别 5.排序算法...

  • 排序学习 - 为了面对算法面试(2)

    排序学习 - 为了面对算法面试(1) - 选择排序/冒泡排序/插入排序 4.归并排序:归并排序(MERGE-SOR...

  • 【排序算法】4.希尔排序

    希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔...

  • 十大排序算法

    十大排序算法 1.插入排序 2.折半插入排序算法 3.选择排序 4.冒泡排序 5.谢尔排序 6.快速排序 7.堆积...

  • 1.普里姆算法 2.克鲁斯卡尔算法 3.最短路径 4.拓扑排序

  • JS实现的常见算法

    1.冒泡排序 2.简单选择排序 3.直接插入排序 4.希尔排序 5.去重算法 6.快速排序

  • 十大算法

    1.归并排序,快速排序和堆排序 2.比例积分微分算法 3.整数因式分解 4.安全哈希算法 5.傅立叶变换与快速傅立...

  • Geekband-third week of part3

    1.泛型算法之变易算法 2.泛型算法之排序 3.泛型算法之泛型数值算法 4.内存分配器

  • 问题收集1

    算法部分 1.快速排序 2.冒泡排序 3.希尔排序 4.插入排序 5.统计出现的字符串 6.push pop

网友评论

    本文标题:4.排序算法(4)

    本文链接:https://www.haomeiwen.com/subject/qzcyzktx.html