关于冒泡排序

关于冒泡排序

老师,能把比如5个数组成的列表的冒泡排序的循环语句写一下我们学习一下么,谢谢!

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好,同学可根据老师讲的原理结合下边的代码理解一下冒泡排序。这里用到了range函数,range(start, stop[, step]) 函数可创建一个整数列表,默认是从 0 开始,计数到 stop 结束,但不包括 stop;step:步长,默认为1,例如:range(0, 5, 1)是[0, 1, 2, 3, 4]。后边课程中会讲到,同学可以先做一下了解,方便更好的理解冒泡排序。同学如果有什么问题可在问答区继续提问。

例:

list1 = [28, 32, 14, 12, 53, 42]

# 外层循环:控制比较的轮数
for i in range(0, len(list1) - 1):
    # 内层循环:控制每一轮比较的次数,兼顾参与比较的下标
    for j in range(0, len(list1) - i - 1):  # 为了避免列表的下标越界
        if list1[j] > list1[j + 1]:
            # 交换两个数的位置
            temp = list1[j]
            list1[j] = list1[j + 1]
            list1[j + 1] = temp

print(list1)  # [12, 14, 28, 32, 42, 53]

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

  • 7vince 提问者 #1
    看完这个基本上理解了,还有两个小问题,可能是之前没怎么学扎实 第一个问题是,交换两个数位置的这三行语句,对变量进行赋值的时候,temp不会随着list1[j]的变化而变化是吧?但之前学习的时候,好像有些时候,变量会随着变化,能稍微解释一下什么时候会变化,什么时候不会么 第二个问题就是,防止下标越界这行代码我能理解,但是在实际操作中,是不是只是为了减少运算,因为即使越界了,也不会对结果产生改变,因为最大值已经在最右边了
    2019-04-18 10:23:54
  • 好帮手慕美 回复 提问者 7vince #2
    当if条件成立时,即当前一个值大于后一个值时两个数会交换位置,不成立时不会执行交换位置语句,当list1[j]的值为32时,list1[j + 1]的值为14,执行交换位置语句两个数交换位置,此时temp=32,list1[j]=14,list1[j + 1] =32。temp的值是根据list1[j]的值变化的。如果下标越界的话,就不会根据下标得到相对应的值,程序会报下标越界的错。当执行第一次循环i=1时,如果在内层循环中不设置减1防止下标越界的话,当j=5时,list1[5]会取到42这个数,list1[j+1]即list1[6]是取不到值的。后续的外层循环虽然不会受影响,但是第一层循环就会报错程序就执行不下去了。
    2019-04-18 10:41:35
  • 7vince 提问者 回复 好帮手慕美 #3
    明白了明白了
    2019-04-18 10:59:34
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师