最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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 冒泡排序過程分析的評論 (共 條)

分享到微博請遵守國家法律
邹城市| 庆安县| 昌黎县| 日照市| 怀宁县| 延吉市| 绥滨县| 陇西县| 油尖旺区| 盐池县| 镇安县| 个旧市| 大竹县| 永城市| 彰武县| 马关县| 新河县| 榕江县| 孟州市| 元氏县| 芦山县| 吐鲁番市| 凤冈县| 峡江县| 财经| 通许县| 乳源| 北海市| 涞水县| 贵定县| 扶风县| 大丰市| 江油市| 扎兰屯市| 邵阳县| 肃北| 成武县| 宝应县| 重庆市| 新和县| 通化市|