Python:如何使冒泡排序的实现更加省时?

2023-12-01

这是我的代码 - 用于按升序对列表元素进行排序的冒泡排序算法:

foo = [7, 0, 3, 4, -1]
cnt = 0
for i in foo:
    for i in range(len(foo)-1):
        if foo[cnt] > foo[cnt + 1]:
            temp = foo[cnt]
            c[cnt] = c[cnt + 1]
            c[cnt + 1] = temp
        cnt = cnt + 1
    cnt = 0

我一直在修改我的代码,但对于在线判断来说仍然太低效。一些帮助将不胜感激!


提前退出冒泡排序

  1. 第一个循环与内部发生的情况无关
  2. 第二个循环完成所有繁重的工作。你可以摆脱count通过使用enumerate
  3. 要交换元素,请使用 pythonic swap -a, b = b, a.
  4. As per 这条评论,利用提前退出的机会。如果内部循环中的任何点都没有进行交换,则意味着列表已排序,并且不需要进一步迭代。这就是背后的直觉changed.
  5. By definition, after the ith iteration of the outer loop, the last i elements will have been sorted, so you can further reduce the constant factor associated with the algorithm.
foo = [7, 0, 3, 4, -1]
for i in range(len(foo)):
    changed = False
    for j, x in enumerate(foo[:-i-1]):
        if x > foo[j + 1]:
            foo[j], foo[j + 1] = foo[j + 1], foo[j]
            changed = True

    if not changed:
        break

print(foo)
[-1, 0, 3, 4, 7]

请注意,这些优化都没有改变冒泡排序的渐近(Big-O)复杂性(仍然存在)O(N ** 2)),相反,仅减少相关的常数因子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:如何使冒泡排序的实现更加省时? 的相关文章

随机推荐

  • 无法在 Mac OS X 上安装 MySQL

    我遇到了这个问题中描述的确切问题 MYSQL安装问题 不幸的是 没有一个答案对我有帮助 并且它已关闭 我尝试学习 Ruby on Rails 但没有让 MySQL 工作 所以它与编程相关 我输入 rake db create并得到 The
  • 如何在android中方向改变时继续视频播放

    我使用 videoview 在 android 默认播放器中播放视频 当我改变它的方向时 它从头开始播放 我怎样才能让它从方向改变的那一点继续下去 Add
  • 代码隐藏检查以查看控件是否已设置为显示:无?

    我目前有一个隐藏在我的服务器端的控件dropdown hide hide 是我创建的用于隐藏我的方法的服务器端方法 例如 control Style display none 在服务器端如何判断我的控件是否隐藏 我猜你的意思不仅仅是做 if
  • 无法使用preparedStatement创建表

    我无法使用以下命令在数据库 mySQL 中创建表preparedStatement并尝试输入未来表的名称preparedStatement setInteger static String queryCreateTable CREATE T
  • 在 ReportNG 中未获取 TestNG 的报告

    我正在 eclipse 中执行 testng 我想在 reportNG 中生成报告 为此 我已经包含了 guice 3 0 reportng 1 1 3 velocity dep 1 4 jar 文件 并在 xml 文件中添加了侦听器 此外
  • jQuery 通过按钮 onclick 跳转或滚动到页面上的特定位置、div 或目标 [重复]

    这个问题在这里已经有答案了 当我单击按钮时 我希望能够向下跳转或滚动到页面上的特定 div 或目标 clickMe click function jump to certain position or div or target on th
  • 如何定义实例?

    我在面试中被问到一个问题 但我无法回答 这是问题 您将如何定义实例 c 我的回答是它是另一个名字object 这个问题的正确答案是什么 实例之于类 就像蛋糕之于菜谱一样 每当您使用构造函数创建对象时 您都在创建一个实例
  • 用于 WSDL 和 BasicHttpBinding 的 F# 类型提供程序

    当我在 C 中使用 WSDL 服务时 我可以将两个参数传递给构造函数 BasicHttpBinding 和 EndpointAddress BasicHttpBinding basicHttpBinding new BasicHttpBin
  • PHP Artisan Tinker 无法与 Laravel 5.5.16 一起使用

    我运行 php artisantinker 但它不起作用它只显示这样的消息 c xampp htdocs app tpa gt php artisan tinker 错误异常 rmdir C Users KIMUNG 1 AppData L
  • 如何使用 JavaScript Regex 提取字符串?

    我正在尝试使用 JavaScript 正则表达式从文件中提取子字符串 这是文件中的一个片段 DATE 20091201T220000 SUMMARY Dad s birthday 我要提取的字段是 摘要 方法如下 extractSummar
  • Mac Lion 10.8 的 XAMPP 上的 Php-intl 安装

    大家好 我正在尝试在 Mac 版 xampp 上安装 intl 库 我已经安装了 php 5 3 所以我只是将 intl so 文件从 php 5 3 位置复制到 Xampp bin 文件夹 之后我取消注释 extension intl s
  • Java 中的静态泛型字段

    我将通过传递通用字段 演示者 来实现片段的初始化 然后将此演示者连接到创建的视图 public class BaseViewFragment p extends Fragment implements BaseView static pri
  • 在 Access 查询中调用 VBA 函数

    我正在尝试将 8 个不同查询的结果合并回一个查询中 所有要使用的查询都是查询的查询的查询的查询的查询 8 个系列的 4 个查询根据玩家打了多少轮高尔夫球将他们分开 每个系列中的最后一个查询计算每个玩家的确切让分 我正在使用的代码可能无法实现
  • Python 脚本在运行过程中速度变慢?

    我正在运行一个具有以下基本结构的模拟 from time import time def CSV args write args to CSV file return def timeleft a L period print detail
  • 3D 游戏对象的级联效果(Tango、Unity、Android)

    我正在开始使用 Unity 为 Android 构建 Tango 应用程序 我以前有过 Unity 和 Android 经验 但对 Tango 还很陌生 我遵循了这些指南 https developers google com tango
  • 伯努利朴素贝叶斯在 NLTK 和 scikit-learn 中的结果不同

    使用 NLTK 中的伯努利朴素贝叶斯算法和 scikit learn 模块中的伯努利朴素贝叶斯算法对文本进行分类 仅分为两类 时 我得到了完全不同的结果 尽管两者的总体准确度相当 尽管远非相同 但 I 类和 II 类错误的差异很大 特别是
  • Neo4j:正确对螺栓驱动器进行单元测试

    我将 Neo4j Bolt 驱动程序添加到我的应用程序中 如下所示http neo4j com developer java import org neo4j driver v1 Driver driver GraphDatabase dr
  • 如何通过点击缩略图来显示/隐藏大图?

    如何通过点击缩略图来显示 隐藏大图 我需要这样 在这里尝试使用 JSFiddle http jsfiddle net jitendravyas Qhdaz 只用 CSS 可以吗 如果没有 那么 jQuery 解决方案就可以了 An好用吗 a
  • ms-access 内置函数 Month(number)

    我一直在使用访问查询生成器中的 Month 函数的变体 我无法从表达式构建日期值 我希望创建自己的日期 该日期将在幕后执行一些过滤和其他任务 我的问题是 我似乎无法让 Month number 函数执行我认为应该执行的操作 这是我正在寻找的
  • Python:如何使冒泡排序的实现更加省时?

    这是我的代码 用于按升序对列表元素进行排序的冒泡排序算法 foo 7 0 3 4 1 cnt 0 for i in foo for i in range len foo 1 if foo cnt gt foo cnt 1 temp foo