玩转Python插入排序,从基础到进阶

这篇具有很好参考价值的文章主要介绍了玩转Python插入排序,从基础到进阶。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

插入排序是一种简单但有效的排序算法。它的基本思想是将待排序的元素逐个插入已排序序列中的正确位置,直到所有元素都被插入完成。插入排序的算法复杂度为O(n^2),适用于小规模的数据排序。本文将介绍插入排序的原理、具体实现和优化,并提供相关的Python代码示例。

一、插入排序的基本原理

插入排序的基本原理可以用以下步骤描述:

  1. 将待排序序列的第一个元素看作已排序序列。
  2. 从第二个元素开始,逐个将元素插入已排序序列的正确位置。
  3. 每次插入时,从后往前比较已排序序列中的元素,将比当前元素大的元素依次向后移动,直到找到合适的插入位置。
  4. 重复步骤3,直到所有元素都被插入完成,得到有序序列。

插入排序的关键在于找到插入位置并进行元素的后移操作。这种排序算法类似于我们打扑克牌时整理手中的牌,每次将一张新牌插入到已排序的牌中的正确位置。

二、插入排序的具体实现

下面是插入排序的具体实现代码:

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]  # 当前待插入元素
        j = i - 1  # 已排序序列的最后一个元素的索引

        while j >= 0 and arr[j] > key:
            arr[j + 1] = arr[j]  # 比当前元素大的元素向后移动
            j -= 1

        arr[j + 1] = key  # 将当前元素插入到正确位置

    return arr

三、插入排序的优化

插入排序是一种简单但是效率较低的排序算法,特别是对于大规模数据的排序。但是,我们可以通过一些优化策略来提高插入排序的性能。

优化1:减少元素的比较次数

在内层循环中,我们可以通过使用“哨兵”来避免每次比较都需要检查边界条件。我们可以将待插入的元素复制到一个临时变量中,并将其作为哨兵,然后在内层循环中只比较哨兵与已排序元素,而不是每次都访问原始数组。

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]  # 当前待插入元素
        j = i - 1  # 已排序序列的最后一个元素的索引

        while arr[j] > key:
            arr[j + 1] = arr[j]  # 比当前元素大的元素向后移动
            j -= 1

        arr[j + 1] = key  # 将当前元素插入到正确位置

    return arr

优化2:使用二分查找确定插入位置

传统的插入排序是通过逐个比较已排序元素找到正确的插入位置。但是,我们可以使用二分查找来确定插入位置,从而减少比较的次数。

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]  # 当前待插入元素
        left, right = 0, i - 1  # 已排序序列的左右边界

        while left <= right:
            mid = (left + right) // 2  # 中间位置
            if arr[mid] > key:
                right = mid - 1
            else:
                left = mid + 1

        for j in range(i - 1, left - 1, -1):
            arr[j + 1] = arr[j]  # 比当前元素大的元素向后移动

        arr[left] = key  # 将当前元素插入到正确位置

    return arr

四、总结

本文介绍了插入排序的原理、具体实现和优化。插入排序是一种简单但有效的排序算法,适用于小规模的数据排序。通过不断将元素插入已排序序列的正确位置,最终得到有序序列。我们还介绍了两种优化策略,包括减少元素的比较次数和使用二分查找确定插入位置。这些优化可以提高插入排序的性能。通过掌握插入排序的原理和优化方法,我们可以更好地理解和应用这一常用的排序算法。

五、最后

关注我,更多精彩内容立即呈现!文章来源地址https://www.toymoban.com/news/detail-569957.html

到了这里,关于玩转Python插入排序,从基础到进阶的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python知识点100篇系列(11)-浮点数四舍五入的两种方法

    Python 的四舍五入主要有两种方式; 内置函数 round(number[, ndigits]) 使用 Decimal 先说结论: 如果是对金额的四舍五入,不建议使用内置函数,原因如下: 使用round方法: python3中的round函数对浮点数进行四舍五入的规则: 参数ndigits 不为 0 的情况 如果保留位数的后一位小于等于

    2024年02月07日
    浏览(27)
  • Python的知识点运用-2(排序&&找差值及修正ts合成顺序)

    本章内容,涉及到上一章的视频爬虫,但是问题不大。最主要还是基础内容。 基础内容:排序,找出缺失值。 学习本章的前,我是建议去跑一遍gitee上的代码的。 排序问题由来 视频获取后,根据命名,排序是错的。问题除了命名以外还有一个因素就是多线程并发的原因。

    2023年04月09日
    浏览(26)
  • 【Vue前端】vue使用笔记0基础到高手第2篇:Vue进阶知识点介绍(附代码,已分享)

    本系列文章md笔记(已分享)主要讨论vue相关知识。Vue.js是前端三大新框架:Angular.js、React.js、Vue.js之一,Vue.js目前的使用和关注程度在三大框架中稍微胜出,并且它的热度还在递增。Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。Vue.js是一个构建

    2024年02月19日
    浏览(32)
  • 【python进阶】列表排序已经掌握?这种将变量插入列表序列的方法你该知道了

    🙋‍♂️作者简介:生鱼同学,大数据科学与技术专业硕士在读👨‍🎓,曾获得华为杯数学建模国家二等奖🏆,MathorCup 数学建模竞赛国家二等奖🏅,亚太数学建模国家二等奖🏅。 ✍️研究方向:复杂网络科学 🏆兴趣方向:利用python进行数据分析与机器学习,数学建模竞

    2023年04月08日
    浏览(34)
  • 后悔没早学这份Python神级文档!2023最新入门到进阶核心知识点学习文档!

    如今学 Python 的程序员越来越多,甚至不少人会把 Python 当作第一语言来学习。不过尽管 Python 功能强大上手轻松,但并不代表它的学习曲线不陡峭,得来全不费工夫。 当推开 Python 的大门,你会发现 Python 入门简单但精通很难。看似语法记得滚瓜烂熟,但一进入实际项目,就

    2024年02月06日
    浏览(36)
  • Python爬虫基础知识点

    Python爬虫是使用Python编写的程序,可以自动抓取互联网上的数据。常用的Python爬虫框架包括Scrapy、BeautifulSoup、Requests等。Python爬虫可以应用于众多场合,如大数据分析、信息监测、数据挖掘和机器学习等领域。那么新手应该如何学习python爬虫呢? 以下是Python爬虫的基础知识:

    2024年02月08日
    浏览(41)
  • Python基础知识点入门

    初学Python时,以下是一些基础知识点和示例,以帮助你建立坚实的编程基础。 1. 变量和数据类型 Python中的变量用于存储数据。以下是一些常见的数据类型和示例: 整数(int) 浮点数(float) 字符串(str) 布尔值(bool) 2. 列表(List) 列表是一种有序的数据结构,可以存储

    2024年02月07日
    浏览(39)
  • Python基础知识点-- if 语句

           此文章为Python基础知识点(从入门到实践)--  if 语句,此节Python基础知识点包括:条件测试、if 语句、使用if 语句处理列表、设置 if 语句格式。  目录 一、条件测试 1.1 检查是否相等 1.2 检查是否相等时区分大小写 1.3 检查是否不相等 1.4 数值比较 1.5 检查多个条件

    2024年02月06日
    浏览(37)
  • 【数据结构】带你玩转排序:堆排序、希尔排序、插入排序、选择排序、冒泡排序、快排(多版本)、归并排序

    英杰社区 https://bbs.csdn.net/topics/617804998 目录 常见算法的实现         插入排序         希尔排序         堆排序         选择排序         冒泡排序         快速排序         Hoare版本         随机选Keyi               三数取中         挖坑法  

    2024年02月08日
    浏览(42)
  • Python之字典(dict)基础知识点

    字典是python当中的一种数据类型,其结果跟之前学过的列表、元组有很大区别,字典内部是一个一对一映射的数据关系。 字典语法: dictionary = {key1:value1, key2:value2, ...} key是字典中的键,value是对应的值 字典必须用大括号{},key与对应的value用“:”连接,中间用“,”断开。

    2024年02月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包