百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

利用python实现冒泡排序法 python中冒泡排序怎么编写

off999 2024-12-26 15:55 34 浏览 0 评论

冒泡排序法:

  1. 属于交换排序
  2. 两两比较大小,交换位置。如同水泡咕嘟咕嘟往上冒
  3. 结果分为升序和降序排列

升序排序原理

  1. n个数从左至右,索引编号从0开始到n-1,索引0和1的值比较,如果索引0大,则交换两者位置,如果索引1大,则不交换。继续比较索引1和2的值,将大值放在右侧,直到索引n-2和n-1比较完,第一轮比较完成,此时,位于最右侧的值为最大的数。
  2. 第二轮从索引0开始比较到索引n-2,因为最右侧n-1位置上已经是最大值了。依次类推,每一轮都会减少最右侧的不参与比较,直至剩下的最后2个数比较。(降序和升序相反)

冒泡排序算法代码:

#冒泡排序法
import time
data=[1,2,7,4,5,6]
count=0 #记录比较次数
count_swap=0 #记录交换次数
print("待排序的列表:",data)
start_time=time.time()
for i in range(len(data)):
    for j in range(len(data)-i-1):
        count+=1
        if data[j]>data[j+1]:
            tmp=data[j]
            data[j]=data[j+1]
            data[j+1]=tmp
            count_swap+=1
        print("第{0}轮:索引{1}和索引{2}比较后的结果:{3}".format(i+1,j,j+1,data))        
span_time=(time.time()-start_time)*1000
print("排序结果为:{0},总比较次数为:{1},交换次数为:{2},耗时:{3} 毫秒".format(data,count,count_swap,span_time))

运行结果如下:


由运行结果可以看出,经过第1轮的循环比较后,列表已经达到了从小到大的排序结果,第2轮循环过程中,没有出现元素位置交换,第3/4/5轮的循环比较并没有比较的必要。由此可以对算法进行优化,当某轮循环后没有元素进行位置交换,则说明达到了排序结果,跳出循环,程序终止

算法优化代码:

#冒泡排序法优化算法
import time
data=[1,2,7,4,5,6]
count=0 #记录比较次数
count_swap=0 #记录交换次数
print("待排序的列表:",data)
start_time=time.time()
for i in range(len(data)):
    flag=False #定义一个标记,初始值为False,当某轮循环中存在元素位置交换,则为True
    for j in range(len(data)-i-1):
        count+=1
        if data[j]>data[j+1]:
            tmp=data[j]
            data[j]=data[j+1]
            data[j+1]=tmp
            count_swap+=1
            flag=True
        print("第{0}轮:索引{1}和索引{2}比较后的结果:{3}".format(i+1,j,j+1,data))

    if not flag:
        break
span_time=(time.time()-start_time)*1000
print("排序结果为:{0},总比较次数为:{1},交换次数为:{2},耗时:{3}毫秒".format(data,count,count_swap,span_time)

运行结果如下:


由上述运行结果可以看出,程序进行了2轮循环比较后可以确认达到了最终排序结果,没有进行后面3轮的比较,由此也节省了算法运行时间,提升算法效率。

算法总结:

  1. 冒泡法需要数据一轮轮进行比较
  2. 可以设定一个标记判断此轮是否有数据交换发生,如果没有发生交换,可以结束排序,如果发生交换,继续下一轮排序
  3. 最差的排序情况是:初始顺序与目标顺序完全相反,遍历次数为1,2....n-1之和n(n-1)/2
  4. 最好的排序情况是:初始顺序与目标顺序完全相同,遍历次数为n-1
  5. 时间复杂度O(n**2)

相关推荐

怎么用火绒关闭win安全中心(win10火绒安全软件怎么关闭)

一、火绒防火墙关闭方法在电脑上运行火绒软件后,点击首页界面的“防护中心”,在病毒防护界面可以关闭文件、U盘、邮件等保护功能,。系统防护:在该界面可以关闭系统防护功能,。网络防护:可以关闭网络保护等功...

微软应用商店下载手机版(微软应用商店在哪下)

、在桌面任务栏找到微软应用商店,点击并打开。2、进入页面后点击【应用】,进入应用页面。3、在页面里往下移动,找到热门应用,找到一个软件,点击进入。4、进入页面后,点击【安装】,软件会自动安装,安装完毕...

win11系统怎么查看电脑配置(win11怎么查看系统版本)

答:win11查看电脑配置步骤如下。1.点击下方任务栏的windows图标或者按下键盘“windows键”打开开始菜单。2.在开始菜单中找到“设置”或“settings”,一般是右上角的齿轮状按钮,3...

麦克风没坏但是没声音(麦克风没声怎么回事)

几种可能性,供您参考:1、麦是完全好的(其它机子上可以用)2、插孔没有插错3、音量控制里的麦克风并没有静音掉4、声卡驱动已重装过N次,新的旧的都试过了5、音量控制→属性→录音→麦克风下面的勾...

win10系统怎么分区(win10应该怎么分区)
  • win10系统怎么分区(win10应该怎么分区)
  • win10系统怎么分区(win10应该怎么分区)
  • win10系统怎么分区(win10应该怎么分区)
  • win10系统怎么分区(win10应该怎么分区)
wps office是干什么的(wps office是干什么的可以卸载吗)

   WPSOffice一站式办公服务平台,具有可兼容Word、Excel、PPT三大办公组件的不同格式,支持PDF文档的编辑与格式转换集成思维导图、流程图等诸多功...

百度网页(百度网页自动翻译怎么设置)

1、百度的新闻源网站太多了,基本上大型的商业门户+政府官方的媒体、机构部门都是。2、出现在【百度新闻】里的网站都是新闻源网站。3、怎么判断一个网站是不是新闻源:1)在百度新闻下直接搜网站名字,如果出现...

外国网站的浏览器下载(外国网站的浏览器下载Games)

答,可在浏览器上面下载所需要的视频/音乐的名称,下载完毕后,按所给的排列表找出所需要的视频/音乐。如果是喜欢的视频/音乐它在浏览器里边都有分类,可详细的介绍一下自己吧,还可以在古典音乐或者名著导读介绍...

京东攒机助手(京东攒机在哪)
京东攒机助手(京东攒机在哪)

自己在京东买的配置,以为身边的人能帮忙组装,但是好像超过了个人的认知,所以无奈之下只能在京东找专业人士进行安装,挺快,前一天傍晚下单,第二天上午上班就来了,组装师傅挺好,挺有耐心,业务也挺熟练,走线看起来也不错,买的机箱是师傅从来没有接触过...

2025-11-14 22:03 off999

腾讯电脑管家和360哪个好(腾讯电脑管家好用还是360好用)

两个都很好。1.腾讯电脑管家和360卫士都是电脑上最常见的免费杀毒软件,两款软件在病毒查杀上都是首屈一指的。2.360卫士在功能上十分丰富,从木马查杀到电脑清理以及优化加速都是一应俱全的,而且还集成了...

笔记本突然没声音(笔记本突然没声音是什么原因)

可能是因为电脑声音驱动设备故障导致电脑没有声音。解决方法:使用Win+X快捷键,然后在弹出的窗口中点击“设备管理器”选项,之后点击“打开声音、视频和游戏控制器”选项,打开的属性界面查看运行是否正常,或...

大白菜一键装机win7系统(大白菜装系统教程win7)

1.电脑开机按f2或del进bios里面,启动项里面设置U盘启动,保存退出重启。2.键盘上一直按f12或f10,选择大白菜的u盘,进入pe界面,键盘按上下健移动,选择2003pe或win10pe,按回...

迅雷在线资源网观看(迅雷资源网 1080p 下载)
  • 迅雷在线资源网观看(迅雷资源网 1080p 下载)
  • 迅雷在线资源网观看(迅雷资源网 1080p 下载)
  • 迅雷在线资源网观看(迅雷资源网 1080p 下载)
  • 迅雷在线资源网观看(迅雷资源网 1080p 下载)
电脑windows密钥怎么查(windows密钥怎么看)

Win10系统查看并激活产品密钥的方法为:1、首先、进入到电脑屏幕的首页,在左上角会看到界面首页的“此电脑”选项。2、右键单次点击“此电脑”选项,在弹出的菜单快捷栏中选择最下方的“性”选项,并进行点击...

深度技术ghost xp sp3 如何安装

1、ghostxpsp3快速装机版使用ghost镜像来安装。方便快捷易操作。2、电脑开机进入bios后设置成光驱启动。设置方法参阅主板说明书。3、放入安装光盘后保存退出。电脑自动重启后光盘开始引导...

取消回复欢迎 发表评论: