chatgpt赋能python:用Python实现冒泡排序:提高排序算法效率

news2024/9/28 13:27:56

用Python实现冒泡排序:提高排序算法效率

在计算机科学中,排序算法是一项重要而基础的任务。其中,冒泡排序是最简单、最基础的算法之一。它的思路很简单:将数组中相邻的两个元素进行比较,并根据大小交换位置。通过多次排序,将最大的元素不断地“冒泡”到最后面,从而使整个数组有序。

Python作为一种直观易用的编程语言,是实现冒泡排序的优选语言之一。它不仅拥有丰富的库和模块,而且语言简洁和易于阅读。在本文中,我们将使用Python实现冒泡排序,并探讨如何提高算法效率。

实现冒泡排序

首先,我们需要先定义一个函数来实现冒泡排序。传入参数为待排序列表:

def bubble_sort(lists):
    # 控制排序轮数
    n = len(lists)
    for i in range(n - 1):
        # 控制每轮排序次数
        for j in range(n - i - 1):
            if lists[j] > lists[j + 1]:
                lists[j], lists[j + 1] = lists[j + 1], lists[j]

冒泡排序的核心是双重循环,在外层循环中控制排序的轮数,而在内层循环中控制每轮排序的次数。具体地,我们采用两两比较的方法,如果前一个数大于后一个数,就交换它们的位置。这样一轮比较下来,最大的数就会沉到最底部。接着,我们通过外层循环控制排序的轮数,每轮都将一个数“冒泡”到最后,直至所有的数都有序。

提高算法效率

虽然冒泡排序是最基础的排序算法,但在实际使用中,其时间复杂度比较高,达到了O(n^2)。特别是当排序的数据量较大时,其运行时间会非常长。因此,我们需要通过优化算法,提高其效率。

1. 添加标记控制排序提前结束

冒泡排序的特点是每轮排序都会将一个最大值“冒泡”到最后。因此,在排序的过程中,如果没有发生任何交换,说明已经完成排序。在这种情况下,我们可以提前结束排序,从而提高效率。

def bubble_sort(lists):
    n = len(lists)
    for i in range(n - 1):
        flag = True
        for j in range(n - i - 1):
            if lists[j] > lists[j + 1]:
                flag = False
                lists[j], lists[j + 1] = lists[j + 1], lists[j]
        if flag:
            break

2. 优化排序范围

在上述代码中,我们每轮都会将最大值“冒泡”到最后,并且下一轮排序时会排除已经排好序的部分。这样一来,我们在每轮排序时,其实只需要比较未排序部分的前n-i个元素。

def bubble_sort(lists):
    n = len(lists)
    for i in range(n - 1):
        flag = True
        for j in range(n - i - 1):
            if lists[j] > lists[j + 1]:
                flag = False
                lists[j], lists[j + 1] = lists[j + 1], lists[j]
        if flag:
            break

3. 适当增加随机性

在排序的数据量较大时,如果数据本身就是有序的,那么冒泡排序的效率将会非常低。为了避免这种情况,我们可以将数据集合随机化,打乱数据顺序,从而让冒泡排序更具有随机性。

import random

def bubble_sort(lists):
    n = len(lists)
    for i in range(n - 1):
        flag = True
        for j in range(n - i - 1):
            if lists[j] > lists[j + 1]:
                flag = False
                lists[j], lists[j + 1] = lists[j + 1], lists[j]
        if flag:
            break

lists = [random.randint(1, 100) for i in range(20)]
bubble_sort(lists)
print(lists)

结论

冒泡排序是最基础的排序算法之一,在数据量较小时,其实现简单,易于理解。但在实际应用中,随着数据量的增加,其时间复杂度也随之增大,因此需要进一步优化算法。本文介绍了如何通过标记控制排序提前结束、优化排序范围以及适当增加随机性等方法来提高冒泡排序的效率。在实际应用中,程序员需要根据具体问题情况选择合适的算法,以提高程序运行效率。

最后的最后

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。

对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。

🧡AI职场汇报智能办公文案写作效率提升教程 🧡 专注于AI+职场+办公方向。
下图是课程的整体大纲
img
img
下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具
img

🚀 优质教程分享 🚀

  • 🎄可以学习更多的关于人工只能/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦!
学习路线指引(点击解锁)知识定位人群定位
🧡 AI职场汇报智能办公文案写作效率提升教程 🧡进阶级本课程是AI+职场+办公的完美结合,通过ChatGPT文本创作,一键生成办公文案,结合AI智能写作,轻松搞定多场景文案写作。智能美化PPT,用AI为职场汇报加速。AI神器联动,十倍提升视频创作效率
💛Python量化交易实战 💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/711999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

篇章十二 Vue3开发

文章目录 Vue3.0Vue带来了什么一、创建Vue3.0工程1、使用 vue-cli 创建2、使用 vite 创建1、创建工程2、分析工程结构2.1、main.js文件中2.2、App.vue文件中 二、常用 Composition API1、Options API 存在的问题2、Composition API 的优势3、常用的Composition API① 拉开序幕的…

Nvidia jetson TX2挂载256gSD卡

ps:在开始之前要做一点儿准备工作:把SD卡插进去,如果插进去了,ubuntu桌面上会显示SD卡: 1. 查看256G硬盘信息 sudo fdisk -lu一般显示的应该是下面这种内容: 2.修改sd卡的模式 sudo mkfs -t ext4 /dev/mmcblk1p1…

Spring Boot 中的负载均衡

Spring Boot 中的负载均衡 负载均衡是分布式系统中非常重要的一个概念,它可以帮助我们将请求分摊到多个服务实例中,从而提高系统的可用性和性能。在 Spring Boot 中,负载均衡通常是通过 Ribbon 实现的。本文将深入探讨 Spring Boot 中的负载…

机器学习第二课(KNN算法)

文章目录 一、介绍KNN1.1 定义1.2 工作流程 二、自实现KNN2.1 问题2.2 步骤 一、介绍KNN 1.1 定义 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。 涉及到距离的计算(欧式距离&…

(43)绞盘

文章目录 前言 43.1 在哪里购买 43.2 连接和配置 43.3 任务期间的控制 43.4 视频 前言 Daiwa winch 是专门为无人机配送设计的高质量绞盘。该绞盘包括一个"线端检测开关",可防止将线拉得太紧,从而使设备拉伤或断线。绞盘包括一个弹簧装置…

从流处理来深入理解消息队列

大家好,我是 方圆。在《数据密集型应用系统设计》这本书中关于流处理的部分提到了消息队列相关的知识,我觉得它对理解和之后使用消息队列中间件有很大的帮助,遂将其中重要的部分总结出来,但也更推荐大家去看原书,原文收…

一文了解Python中的运算符

目录 🥩1.1.算数运算符 🥩1.2.赋值运算符 🥩1.3.复合赋值运算符 🥩1.4.比较运算符 🥩1.5.逻辑运算符 🦐博客主页:大虾好吃吗的博客 🦐专栏地址:Python从入门到精通专栏 P…

Android通过连接USB读写SD卡(libaums方案)

Android通过连接USB读写SD卡 最近有一个需求是要求通过Usb扩展读取到SD卡的内容。可以从Usb存储设备拷贝文件到内置卡,也可以从内置卡文件拷贝到Usb存储。 1. 相关的引入包 implementation androidx.core:core-ktx:1.7.0implementation androidx.appcompat:appcompa…

基于PSO优化LSSVM的时序预测MATLAB实战

今天给大家分享PSO优化LSSVM的时序预测代码实战,主要从算法原理和代码实战展开。需要了解更多算法代码的,可以点击文章左下角的阅读全文,进行获取哦~需要了解智能算法、机器学习、深度学习和信号处理相关理论的可以后台私信哦,下一…

SQL-每日一题【196.删除重复的电子邮箱】

题目 表: Person 编写一个 SQL 删除语句来 删除 所有重复的电子邮件,只保留一个id最小的唯一电子邮件。 以 任意顺序 返回结果表。 (注意: 仅需要写删除语句,将自动对剩余结果进行查询) 查询结果格式如下所示。 示…

电脑密码忘了怎么解除?分享4个好方法!

我的电脑设置了一个密码,但刚刚想开电脑的时候怎么也想不到那个密码了!电脑密码忘了怎么解除?有什么好的方法吗? 为电脑设置一个密码可以更好地保护我们的电脑数据。但有时候我们在输入密码时可能会忘记密码,这将导致我…

考虑学PMP认证的项目经理,听我一句劝

早上好,我是老原。昨天3月份的考试成绩出了,我的朋友圈跟过年似的。 参加完3月的考试的同学体感普遍不是很好,本以为大家能过就很优秀了嘛,没想到是3A满天飞…… 我结合自己和一些同学的备考经历,分享一些备考思路。 …

【c++】并行编程:OpenMP入门

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍OpenMP入门。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&#x1f9…

“希尔排序:打破时间瓶颈的排序算法 “

文章目录 🔍什么是希尔排序🔑希尔排序分组思想📈希尔排序的优缺点👨‍💻希尔排序代码剖析 🔍什么是希尔排序 希尔排序(Shell Sort)是插入排序的一种高效率的改进版本,也…

浏览器缓存方式有哪些(cookie、localstorage、sessionstorage)

浏览器缓存方式 概要 http缓存 基于HTTP协议的浏览器文件级缓存机制 websql 只有较新的chrome浏览器支持,并以一个独立规范形式出现 indexDB 一个为了能够在客户端存储可观数量的结构化数据,并且在这些数据上使用索引进行高性能检索的 API Cooki…

v-model双向绑定指令

文章目录 前言v-model.lazy 延迟同步v-model.trim 去掉空格 前言 v-model指令是Vue.js中实现双向数据绑定的一种重要机制。它可以将表单控件的值与Vue.js实例中的数据进行双向绑定,即当表单控件的值发生变化时,Vue.js实例中的数据也会随之更新&#xff…

qt实现漂亮主页面

模仿自feiyangqingyun的博客_CSDN博客-Qt/C控件SDK使用示例,Qt/C音视频开发,Qt/C自定义控件领域博主 1.无边框窗口可移动 #ifndef MOVABLE_WIDGET_H #define MOVABLE_WIDGET_H#include <QWidget>class movable_widget:public QWidget { public:movable_widget(QWidget *…

华为荣耀6X(BLN-AL20)解锁全过程

这台旧手机一直闲置&#xff0c;想用它做测试机&#xff0c;所以必须先解锁。在此之前我已将手机改成了直供电&#xff0c;所以图片里没有电池&#xff0c;但是目前直供电方案并不完美&#xff0c;除了直供电线要插&#xff0c;尾插也要插上&#xff0c;淘宝卖家给出的理由是普…

部署 CNI网络组件

部署 flannel K8S 中 Pod 网络通信&#xff1a; ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器&#xff08;Pod 内的容器是不会跨宿主机的&#xff09;共享同一个网络命令空间&#xff0c; 相当于它们在同一台机器上一样&#xff0c;可以用 localhost 地址访问彼此的端…

如何看待程序员的高薪现象?

点击上方关注 “终端研发部” 设为“星标”&#xff0c;和你一起掌握更多数据库知识 最近在知乎上看到这样个话题&#xff1a; 难道不应该吗&#xff1f; 本人月薪八千&#xff0c;在北京一线&#xff0c;拿着最基础的工资&#xff0c;上的加班最频繁的班&#xff0c;干最累的活…