冒泡排序

我们两清 提交于 2019-12-06 21:16:05

'''

冒泡算法的原理是经过每一轮的比较都能确定这一轮的最大数

所以到后面的比较次数都是依次少一

例如[3,4,9,1,5]
第一轮比较,比较4次
由于是有5个数,相邻的两个数两两比较,5个数需要比较4次,N个数,需要比较N-1次

3,4比较不用变
4,9比较不用变
9,1比较要交换位置 变成1,9
9,5比较需要交换位置,变成5,9
这样就完成了第一轮的比较,第一轮确定了列表的最大一位数为9,之后的比较就可以把9祛除了
再去比较其他的数就好了,应为既是是比较了,位置也是不会改变,浪费资源而已

经过第一轮的比较列表变成了[3,4,1,5,9],第二轮只需要比较三次
第二轮由于最后一个确定了,只需要比较三次就好了
3,4比较不用变
4,1比较需要交换,变成1,4
4,5比较,不用变,
由此我们确定了第二大的数是5
列表变成了[3,1,4,5,9]

第三轮比较,只需要比较两次
3,1比较需要交换,变成1,3
3,4比较不用改变,
列表变成了[1,3,4,5,9]

第四轮比较,只需要完成一次就行了
1,3比较不需要变化位置,

因此最终的列表为[1,3,4,5,9]
'''

from random import randint
l1 = [ randint(1,100) for _ in range(10)]
print(l1)
def dubbel_sort(arr):
    k = 0
    for i in range(len(arr) - 1):
        for j in range(len(arr) - 1 - i):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                k +=1
    print('经过%s次的比较得出的结果'%k)
    return arr

print(dubbel_sort(l1))
[90, 8, 55, 12, 71, 6, 72, 72, 60, 5]
经过25次的比较得出的结果
[5, 6, 8, 12, 55, 60, 71, 72, 72, 90]
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!