python冒泡排序,非常细节
动图放上。
排序的核心是比较两个数的大小。两个数的排序很easy,三个数排序也只是两两比较2次,四个数排序也是两两比较两个数。
进行多次的两个数比较,无非是:获得最大值或者最小值,得出最大最小值之后,再在剩下的数里面找出最大最小值。……
冒泡排序升序排序的主要思路:
1,两两比较找到最大值,将其放到数组尾巴处,不再参与排序。
2,剩下的n-1个数继续两两比较找出最大值,放到数组倒数第二个位置。
3,一直比较……
4,直到只有最后两个数比较时,排序完成。
若有错误,请指正。
目录
一,冒泡排序是怎么进行两两比较的?
二,冒泡排序把比出来的最大值放到哪里?
三,冒泡排序需要循环多少次才能完成排序?
四,每次找最大值时,需要两两比较多少次?
五,冒泡排序总共需要两两比较多少次?
六,冒泡排序如何优化?
1,什么情况下需要优化?
2,如何实现优化?
2.1 怎么判断需要优化,进而提前结束算法?
2.2 优化方法?
七,python代码实现冒泡排序
八,python代码实现冒泡排序(优化版)
一,冒泡排序是怎么进行两两比较的?
答:从左往右相邻两个数两两比较。
二,冒泡排序把比出来的最大值放到哪里?
两两比较找出最大值之后,可以把这个最大值放到一个新数组里面,但这样浪费内存空间。重点是:冒泡排序从左往右两两比较天然的将最大值移到了数组容器最后面。
三,冒泡排序需要循环多少次才能完成排序?
答:n-1次,当有n个数需要排序,需要两两比较的轮数为n-1次,即需要找出n-1个最大值,最后一个自然为最小。
四,每次找最大值时,需要两两比较多少次?
答:若当前剩下数字个数为n,则需要n-1次。很明显,他就是不停的在未排序的数字中找最大值,自然需要两两比较当前剩余数字的个数-1次。
五,冒泡排序总共需要两两比较多少次?
答:最差情况下的次数为:(n-1)(n-2)(n-3)(n-4)……
六,冒泡排序如何优化?
1,什么情况下需要优化?
1,当一个数组已经排好了顺序,我们再对其排序是毫无意义的。
2,当在排序过程中,提前出现排序完成的情况,但是算法过程还将继续,这也是无意义的。
2,如何实现优化?
2.1 怎么判断需要优化,进而提前结束算法?
当在一次找最大值的过程中,没有出现交换两个数情况,即:剩下未排序的数字已经是排好序的了。
2.2 优化方法?
设置标志位flag,当在一次找最大值的过程中,没有出现交换两个数情况,则置flag为true,结束排序。
七,python代码实现冒泡排序
import randomdef Bubble_sort(arr: list):total_circle = len(arr) - 1# 将2,1进行排序,至少需要1轮;# 将3,2,1进行排序,第一轮:2,3,1;2,1,3;第二轮:1,2,3。至少需要两轮。# ……# 将n,n-1,n-2,……进行排序,则至少需要n-1轮# 每一轮循环都把当前循环轮中的最大值沉底(冒泡排序:小的数浮出水面,大的数沉到水底)for i in range(total_circle): # 外层循环,循环n-1次index = 0while index <= total_circle - 1: # 内层循环,每轮循环期间,需要两两比较(n-1)-1次if arr[index] > arr[index + 1]:arr[index], arr[index + 1] = arr[index + 1], arr[index] # 排序算法的核心:比较两个数的大小,进行交换index = index + 1 # 从左往右依次比较两个数的大小,索引+1进行移动total_circle = total_circle - 1 # 每一轮循环之后,当前轮的最大值会被移到最后面,这个值将不再参加排序。则总循环次数-1。if __name__ == '__main__':arr_test = [int(random.random() * 100) for i in range(10)]print('排序之前的列表:')print(arr_test)Bubble_sort(arr_test)print('排序之后的列表:')print(arr_test)
八,python代码实现冒泡排序(优化版)
import randomdef Bubble_sort(arr: list):total_circle = len(arr) - 1# 将2,1进行排序,至少需要1轮;# 将3,2,1进行排序,第一轮:2,3,1;2,1,3;第二轮:1,2,3。至少需要两轮。# ……# 将n,n-1,n-2,……进行排序,则至少需要n-1轮# 每一轮循环都把当前循环轮中的最大值沉底(冒泡排序:小的数浮出水面,大的数沉到水底)for i in range(total_circle): # 外层循环,循环n-1次index = 0flag = 0 # 0表示没有交换过while index <= total_circle - 1: # 内层循环,每轮循环期间,需要两两比较(n-1)-1次if arr[index] > arr[index + 1]:arr[index], arr[index + 1] = arr[index + 1], arr[index] # 排序算法的核心:比较两个数的大小flag = 1index = index + 1 # 从左往右依次比较两个数的大小,索引+1进行移动if flag == 0: # 当在一次找最大值的过程中,未交换过两个数,则直接退出排序过程,即退出外层循环。print('奇迹!排序过程中发现已经完成排序了')breaktotal_circle = total_circle - 1 # 每一轮循环之后,当前轮的最大值会被移到最后面,这个值将不再参加排序。则总循环次数-1。if __name__ == '__main__':arr_test = [int(random.random() * 100) for i in range(10)]print('排序之前的列表:')print(arr_test)Bubble_sort(arr_test)print('排序之后的列表:')print(arr_test)# 多运行几次,会出现提前排好序的情况
python冒泡排序,非常细节相关推荐
- python冒泡排序
python 冒泡排序: data=[7,9,2,8,3,1,4,6,5]for i in range(len(data)): #数据长度len()就是for-in循环的次数; for j in ra ...
- 【转】python包导入细节
[转]python包导入细节 包导入格式 导入模块时除了使用模块名进行导入,还可以使用目录名进行导入.例如,在sys.path路径下,有一个dir1/dir2/mod.py模块,那么在任意位置处都可以 ...
- python字符串的冒泡排序_如何实现python冒泡排序算法?
冒泡排序是一种简单的排序技术,它通过比较相邻的元素遍历整个列表,对它们进行排序并交换元素,直到对整个列表进行排序. 算法:给定一个包含n个元素的列表L,这些元素的值或记录为L0, L1,-,Ln-1, ...
- python冒泡排序函数_python冒泡排序-Python,冒泡排序
arr = [ 7 , 4 , 3 , 67 , 34 , 1 , 8 ] . def bubble_sort : 最近在学习Python,下面是我的一些笔记 冒泡排序 实现思路: 使用双重for循环 ...
- python冒泡排序原理_如何实现python冒泡排序算法?
冒泡排序是一种简单的排序技术,它通过比较相邻的元素遍历整个列表,对它们进行排序并交换元素,直到对整个列表进行排序. 算法:给定一个包含n个元素的列表L,这些元素的值或记录为L0, L1,-,Ln-1, ...
- python 冒泡排序及优化_Python冒泡排序及优化
一.冒泡排序简介 冒泡排序(Bubble Sort)是一种常见的排序算法,相对来说比较简单. 冒泡排序重复地走访需要排序的元素列表,依次比较两个相邻的元素,如果顺序(如从大到小或从小到大)错误就交换它 ...
- python冒泡排序算法非递归_python 冒泡排序,递归
今天LeetCode的时候暴力求解233 问题: 给定一个整数 n,计算所有小于等于 n 的非负数中数字1出现的个数. 例如: 给定 n = 13, 返回 6,因为数字1出现在下数中出现:1,10,1 ...
- python冒泡排序与常用数学计算
一 .冒泡排序: 冒泡排序: 属于交换排序; 两两比较大小,交换位置,如同水泡大的往上(右)跑; n个数从左至右编号从0到n-1,索引0和1比较,如果索引0大,则交换两者位置; 如果索引1大则不用交换 ...
- python mysql append_Python细节——MYSQL的to_sql的if_exists推荐使用append
前言 本篇文章主要探索一个很小细节,就是to_sql 到我们的mysql数据库时,你是使用追加,还是替换呢? 这儿就推荐使用追加!append. 接下来给大家贴代码比较演示. 代码 假设我有一个数据, ...
最新文章
- sybase 数据导入mysql_Windows环境下Sybase12.5 数据库创建与导入数据库.docx
- R语言观察日志(part5)--利用readr和readxl包读写数据
- sqlserver两个日期之间的年数_SQL语句计算两个日期之间有多少个工作日的方法
- 引用使用_引用公文标题时,“”与《》正确使用法则
- springboot集成rocketmq
- URLDecoder.decode url转码百分号问题
- 极光推送JPush使用Java SDK开发
- MMDetection2.XX-Necks之FPN源码解析
- MTK平台 Android8.1 SD卡驱动能力修改
- Spring Boot电商项目46:购物车模块四:【添加商品到购物车】接口;(如果:接口要求返回JSON格式,而接口没有做相应的设置,是会报404错误的)
- 交换机、路由器、网关的概念与用途
- 一个k8s集群——跨云服务器部署
- 用antv-G2实现雷达图
- Ubuntu、Debian 系统安装 PHP 7.4 教程,超简单,一把梭!
- S32K1XX系列单片机 ——MCAL 的CAN模块配置
- 网站域名被劫持,域名被劫持的解决方式
- teamviewer13安装个人免费版
- 华为项目管理法读书笔记
- html项目答辩策划书,答辩会策划书范文.doc
- 电视剧《玉楼春》杀青,演员阵容曝光:影视剪辑月入3万必看指南【覃小龙课堂】
热门文章
- DUNS常见问题汇总(精华)
- 函数式编程、面向对象编程、面向过程编程
- 支付宝支付中enable_pay_channels和disable_pay_channels可支持的枚举
- json数组格式的字符串通过方法直接转换为JSONArray
- js常用的操作json数组
- 1ABCDE*3=ABCDE1
- [论文笔记]Face X-ray for More General Face Forgery Detection
- 在Microsoft outlook(家用版)利用日曆及To-do list
- JAVAAPI获取中文拼音(大小写字母转化)
- 依据CCS分类建树(方案一)