温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

下标式循环以及冒泡算法

发布时间:2020-06-29 05:22:38 来源:网络 阅读:311 作者:027ryan 栏目:开发技术

有如下代码:

li = [13,22,6,99,11]
for i in range(len(li)):
    print li[i]

输出结果:

13
22
6
99
11

要求:实现一个功能,将列表li所有数字按照从左到右的大小顺序进行排序
即按照如下规则:

13 和 22 比较,将大的值放在右侧,即:[13, 22, 6, 99, 11]
22 和 6 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11]
22 和 99 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11]
99 和 11 比较,将大的值放在右侧,即:[13, 6, 22, 11, 99,]
 -----------------省略部分---------------------------
13 和 6 比较,将大的值放在右侧,即:[6, 13, 22, 11, 99,]

从上述可以知,比较要取列表中相邻的两个数,所以这里用for循环,变量用m
相邻的两个数字用li(m)和li(m+1)

for m in range(len(li))
    if li[m] > li[m+1]:
       temp = li[m]
       li[m] = li[m+1]
       li[m+1] = temp]

但是该方法有个弊端,如果m等于列表最后一个下标,那么li[m+1]就不存在从而出现报错
所以对以上方法进行改进:

for m in range(len(li) -1)
    if li[m] > li[m+1]:
       temp = li[m]
       li[m] = li[m+1]
       li[m+1] = temp
print li

输出结果:

[13, 6, 22, 11, 99]

该结果与原始列表li=[13,22,6,99,11]进行对比,发现只做了一次排序,如果要进一步排序还要再接着进行循环排序:

所以对以上代码进行改写:

li = [13, 22, 6, 99, 11]for m in range(len(li)-1):    for n in range(m+1, len(li)):        if li[m]> li[n]:            temp = li[n]            li[n] = li[m]            li[m] = tempprint li

解释:上面用到两层for循环,第一层for循环m取4次值,第二次for循环5次值

当m=0时,range(m+1,len(li))为range(1,5),也就是列表li的下标n的取值:[1,2,3,4]

当m=1时,range(m+1,len(li))为range(2,5),也就是列表li的下标n的取值:[2,3,4]

当m=2时,range(m+1,len(li))为range(3,5),也就是列表li的下标n的取值:[,3,4]

当m=3时,range(m+1,len(li))为range(4,5),也就是列表li的下标n的取值:[4]

后面的比较跟原来比较方式一样。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI