算法创作 | 冒泡排序问题解决方法

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

问题描述

问题:当需要将一组乱序的数据排序时应该如何解决?

示例:此程序每一次输入一组乱序的数据后,会输出一组排好顺序的从小到大(或从大到小)的数据。

输入:[64,34,25,12,22,11,90]

输出:[11,12,22,25,34,64,90]

输入:[64,34,25,12,22,11,90]

输出:[90,64,34,25,22,12,11]

解决方案

输入一组乱序的数据,要求将其输出为一组由从小到大(或从大到小)排列的数据:

原理:比较相邻两个变量但值,满足大于或小于的条件,交换两个变量的值。

例如:一组数据64,34,25,12,22,11,90(从小到大排序),标记的两个数字进行比较如果满足即会交换位置

条件:前者大于后者,满足就交换(从小到大排序)

第一次: 

64,34,25,12,22,11,90//64>34,交换

34,64,25,12,22,11,90//64>25,交换

34,25,64,12,22,11,90//64>12交换

34,25,12,64,22,11,90//64>22,交换

34,25,12,22,64,11,90//64>11,交换

34,25,12,22,11,64,90//64<90,不交换

34,25,12,22,11,64,90//第一轮排序结束

第二次:

34,25,12,22,11,64,90//34>25,交换

25,34,12,22,11,64,90//34>12,交换

25,12,34,22,11,64,90//34>22,交换

25,12,22,34,11,64,90//34>11,交换

25,12,22,11,34,64,90//34<64,不交换

25,12,22,11,34,64,90//64<90,不交换

25,12,22,11,34,64,90//第二轮排序结果

****每一次都会通过相邻比较得出一个最大值,以此类推,就能将此数据排序

代码清单-冒泡排序问题Python代码

def sort(arr):          #sort函数,arr是一个参数(形参)#从小到大排序

    n = len(arr)        #将数组长度赋予n,n为数组长度的值

    for i in range(n):     # for循环,循环n次

        for j in range(0, n - i - 1):   #j在0到n-i-1之间,假如n为5,第一次就在0到4,第二次就是0到3

            if arr[j] > arr[j + 1]:   #如果前一个数大于后一个数

                mid =arr[j]             #中间变量mid暂时存储前一个值

              arr[j]=arr[j + 1]          #将后一个值赋值给前一个

               arr[j + 1] =mid          #将mid赋值给后一个,交换完毕

##每一次排序都能确定一个最大的值

arr=[64,34,25,12,22,11,90]   #随机输入一个数组

sort(arr)                   #调用函数sort()

 

print("排序后的数组:")

for i in range(len(arr)):         #遍历排序好的数组

   print(arr[i])

 

结语

本文主要讲述用“冒泡排序”的算法来解决数据乱序的问题,这需要做到的是熟练掌握for循环及定义函数来解决此类问题,解决生活中需要将大量数据惊醒排序的问题。这类型给数字排序的问题就可以通过这种方法来解决,当然或许还有其它更好的方法,只是暂时就想到了这个,但相信会有人想出更好的解决方法,所以,要在今后的学习中根据所学的知识去拓展一些更加简洁和方便的解决方法。

实习编辑:李欣容

作者:陈文杰、邓斯丹、李俭

稿件来源:深度学习与文旅应用实验室(DLETA)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法与编程之美

欢迎关注『算法与编程之美』

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值