【无标题】

提示:本系列博客是对bilibili算法课程《算法很美》的python笔记总结,其中吸收不少优秀博主的原创博客,由于本人总结未附上对应的博客地址,若发现本文博客内容与您发表的博客内容吻合,请您联系作者,给您添加引用地址。


蓝桥杯之排序算法

  • 前言
  • 1.插入排序
    • 1)原理介绍
    • 2)代码实例
  • 2.希尔排序
    • 1)原理介绍
    • 2)代码实例
  • 总结


前言

排序算法虽然已经内置在python函数,但其排序原理的学习对算法入门帮助良多

简单排序算法可分为冒泡排序、选择排序、插入排序与希尔排序,下面对排序算法中的插入排序和希尔排序进行逐一介绍及代码展示。代码编译环境:python 3.8.6


提示:以下是本篇文章正文内容,下面案例可供参考

1.插入排序

插排的复杂度依然是O(n*n),性能比选择排序略好(插入排序可视化)

1)原理介绍

插入排序的工作原理是,对于每个未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
步骤:
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果被扫描的元素(已排序)大于新元素,将该元素后移一位
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置后
重复步骤2~5。
【无标题】_第1张图片
【无标题】_第2张图片
【无标题】_第3张图片
【无标题】_第4张图片
…(中间过程省略)
【无标题】_第5张图片

2)代码实例

lists=list(map(int,input().split()))
def insert_sort(ary):
    for i in range(1,len(ary)):
        for j in range(i,0,-1):
            if ary[j]<ary[j-1]:
                ary[j-1],ary[j] = ary[j],ary[j-1]
    return ary
print(insert_sort(lists))

2.希尔排序

1)原理介绍

原理:希尔排序又称增量排序,一次希尔排序一个增量,通过增量进行分组,组内进行插入排序。增量递减至一。(希尔排序可视化)
【无标题】_第6张图片
【无标题】_第7张图片
【无标题】_第8张图片
【无标题】_第9张图片
…(中间过程省略)
【无标题】_第10张图片

2)代码实例

lists=list(map(int,input().split()))
def hill_sort(lists):
    interval=len(lists)//2#设置初始间隔为列表长度一半
    while interval>0:
        for i in range(interval,len(lists),1):
#将初始点设为interval,此处i的步长设为1
            for j in range(i,0,-interval):#按间隔进行分组插入排序
                if lists[j]<lists[j-interval]:
                    lists[j],lists[j-interval]=lists[j-interval],lists[j]
        interval=interval//2
    return lists
print(hill_sort(lists))


总结

本文介绍了排序算法中的插入排序和希尔排序及代码,建议读者配合视频教学内容加以使用,下一篇博客为插入排序与希尔排序的介绍。

你可能感兴趣的:(算法专栏,python,算法,蓝桥杯)