vlambda博客
学习文章列表

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


问题描述

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

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

输入:[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(从小到大排序),标记的两个数字进行比较如果满足即会交换位置

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

第一次: 

64342512221190//64>34,交换

34642512221190//64>25,交换

34256412221190//64>12交换

34251264221190//64>22,交换

34251222641190//64>11,交换

34251222116490//64<90,不交换

34251222116490//第一轮排序结束

第二次:

34251222116490//34>25,交换

25341222116490//34>12,交换

25123422116490//34>22,交换

25122234116490//34>11,交换

25122211346490//34<64,不交换

25122211346490//64<90,不交换

25122211346490//第二轮排序结果

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

代码清单-冒泡排序问题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):   #j0n-i-1之间,假如n5,第一次就在04,第二次就是03

            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)