溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

下標式循環(huán)以及冒泡算法

發(fā)布時間:2020-06-29 05:22:38 來源:網(wǎng)絡 閱讀:304 作者:027ryan 欄目:開發(fā)技術(shù)

有如下代碼:

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

輸出結(jié)果:

13
22
6
99
11

要求:實現(xiàn)一個功能,將列表li所有數(shù)字按照從左到右的大小順序進行排序
即按照如下規(guī)則:

13 和 22 比較,將大的值放在右側(cè),即:[13, 22, 6, 99, 11]
22 和 6 比較,將大的值放在右側(cè),即:[13, 6, 22, 99, 11]
22 和 99 比較,將大的值放在右側(cè),即:[13, 6, 22, 99, 11]
99 和 11 比較,將大的值放在右側(cè),即:[13, 6, 22, 11, 99,]
 -----------------省略部分---------------------------
13 和 6 比較,將大的值放在右側(cè),即:[6, 13, 22, 11, 99,]

從上述可以知,比較要取列表中相鄰的兩個數(shù),所以這里用for循環(huán),變量用m
相鄰的兩個數(shù)字用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]就不存在從而出現(xiàn)報錯
所以對以上方法進行改進:

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

輸出結(jié)果:

[13, 6, 22, 11, 99]

該結(jié)果與原始列表li=[13,22,6,99,11]進行對比,發(fā)現(xiàn)只做了一次排序,如果要進一步排序還要再接著進行循環(huán)排序:

所以對以上代碼進行改寫:

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循環(huán),第一層for循環(huán)m取4次值,第二次for循環(huán)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問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI