五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Python 冒泡排序過程分析

2023-07-11 16:47 作者:XelaKi  | 我要投稿

這里是冒泡排序的寫法,作為 Python 新手,我們也能夠掌握其使用

接下來,我們就一層層剖開它的面紗。首先要知道冒泡排序的原理是每輪把大的元素排在后面,我們開始模擬一下上面代碼的過程

先不管那兩層 for 循環(huán),這是比較難理解的點??吹?if 判斷,含義就是前一個數(shù)與后一個數(shù)進(jìn)行大小比較,如果前一個數(shù)比后一個數(shù)大,那么交換位置。例如當(dāng) i = 0 時,即 4 與 3 比較,由于 4 比 3 大,交換位置,變成 [3, 4, 2, 1]

len(nums) - 1 的值為 3,第一輪 j 的值為 0,進(jìn)入到內(nèi)層循環(huán),不難知道這時的 range(0, len(nums) - 1 - j) 等價于 range(0, 3),那么 i = 0 時,4 與 3 比較,交換位置,變?yōu)?[3, 4, 2, 1],由于內(nèi)層循環(huán)結(jié)束,外層循環(huán)才會繼續(xù)。所以 i = 1 時,4 與 2 比較,交換位置,變?yōu)?[3, 2, 4, 1]。繼續(xù) i = 2 時,4 與 1 比較,交換位置,變?yōu)?[3, 2, 1, 4]

內(nèi)層循環(huán)結(jié)束,跳到外層,此時第二輪 j = 1,那么 range(0, len(nums) - 1 - j) 等價于 range(0, 2),所以 i = 0 時,3 與 2 比較,交換位置,變?yōu)?[2, 3, 1, 4]。又當(dāng) i = 1 時,3 與 1 比較,交換位置,變?yōu)?[2, 1, 3, 4]

第三輪 j = 2,那么 range(0, len(nums) - 1 - j) 等價于 range(0, 1),即只有 i = 0,這時 2 和 1 進(jìn)行比較,交換位置,變?yōu)?[1, 2, 3, 4],這樣循環(huán)結(jié)束,得到了排序好的列表

再一次印證了開篇的原理,每一輪結(jié)束后把大的元素放在最后,先是最大,其次是第二大,這樣依次類推。不難看出第一層 for 循環(huán) for j in range(0, len(nums) - 1) 控制的是輪次,對于四個數(shù)而言,最多需要三輪放到后面。對于第二層 for 循環(huán) for i in range(0, len(nums) - 1 - j) 控制的是兩個數(shù)之間的比較,那么每輪減去 j 是因為,第二輪開始時,已經(jīng)在第一輪將一個最大的數(shù)排在后面,不需要再次比較了,所以減去 j 即減去 1,這樣依此類推

理解了上面的原理,我的建議是去寫一遍冒泡排序,嘗試模擬 [4, 1, 3, 2] 的排序過程

Python 冒泡排序過程分析的評論 (共 條)

分享到微博請遵守國家法律
上虞市| 沙洋县| 穆棱市| 连平县| 西畴县| 南开区| 广东省| 谷城县| 班戈县| 桂林市| 昌邑市| 大理市| 宣汉县| 象州县| 深水埗区| 泰宁县| 朔州市| 安达市| 双城市| 同仁县| 丹巴县| 建宁县| 桐柏县| 永德县| 喀喇沁旗| 福安市| 拜城县| 南溪县| 澳门| 渑池县| 义马市| 镶黄旗| 临洮县| 福州市| 安庆市| 定陶县| 肇源县| 安溪县| 南充市| 涡阳县| 民和|