啊哈算法——第一章第二节:冒泡排序

       学习算法不奇怪,啊哈算法很哇塞!大家好,我是pythonitstream。今天我们又来讲一下啊哈磊(原名纪磊)写的《啊哈算法》一书

目录

前言

一、冒泡排序是什么

二、实战应用

二、(1)、分析

二、(2)、代码

总结


前言

       上期讲了桶排序,但是桶排序有点太局限了。所以,今天我们来学习冒泡排序。


一、冒泡排序是什么

冒泡排序对比桶排序的时间复杂度就高多了,是O(N²)。

冒泡排序就是:每次比较两个相邻的元素, 如果他们的顺序错误就把它们交换过来。

好了,中心思想结束了……

二、实战应用

有一个班想让我们统计一下高考分数,分别是577.5,621,771.5,478,699.5,401.5

二、(1)、分析

首先,它包含小数,所以不能用桶排序。考试分数肯定是从大到小啊,所以说,越小的越往后

即使这个班有个别同学考得惨不忍睹,但是我相信那是个别同学行为,还是值得排序的

首先我们要搞一个列表,用来装数:

a=[0 for i in range(101)] #用来装数的列表,最大值100

然后我们要输入。上次输入的方法是挺不错,就是浪费手。这次换一个简便点的:

num=int(input('请输入你要输入数的数量:'))
ask=input('请输入数:') #输入
ask=ask.split(' ') #字符串方法,split指在某几个字符那里分割字符串
for i in range(num):
    ask[i]=int(ask[i]) #一个个的变成整数

虽然也挺费手,但是好歹不用多行输入

然后我们要排序了!重点来了!!!比较大小!!

for j in range(0,num-2):
    for k in range(0,num-j-1):
        if ask[k]<ask[k+1]: #比较大小
            t=ask[k]
            ask[k]=ask[k+1]
            ask[k+1]=t    #文中解释

这里做出解释:

只要你搞过竞赛,你就一定知道这个方法替换两个值的内容。我虽然没有搞过,但是也是浅读过算法竞赛书的。 

最后,打印数:

for l in ask:
    print(l)

 结束!!

二、(2)、代码

代码实现是酱紫的:

a=[0 for i in range(101)] #用来装数的列表,最大值100

num=int(input('请输入你要输入数的数量:'))
ask=input('请输入数:') #输入
ask=ask.split(' ') #字符串方法,split指在某几个字符那里分割字符串
for i in range(num):
    ask[i]=int(ask[i]) #一个个的变成整数

for j in range(0,num-2):
    for k in range(0,num-j-1):
        if ask[k]<ask[k+1]: #比较大小
            t=ask[k]
            ask[k]=ask[k+1]
            ask[k+1]=t    #文中解释

for l in ask:
    print(l)

请输入你要输入数的数量:6

请输入数: 577.5 621 771.5 478 699.5 401.5

771.5
699.5
621.0
577.5
478.0
401.5


总结

冒泡排序的确比桶排序好,但是还是有些bug,所以请看下期——快速排序!

猜你喜欢

转载自blog.csdn.net/pythonitstream/article/details/124763447