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

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

分享到微博請遵守國家法律
定结县| 南阳市| 泗洪县| 都江堰市| 扶余县| 巴林右旗| 彩票| 长顺县| 泰安市| 神木县| 梁平县| 桓仁| 溆浦县| 湾仔区| 鄂托克前旗| 洛阳市| 楚雄市| 大名县| 清河县| 南和县| 博湖县| 中超| 嘉兴市| 兴安县| 安化县| 潜江市| 缙云县| 讷河市| 凤台县| 德惠市| 昔阳县| 昌黎县| 司法| 大冶市| 监利县| 沾化县| 罗田县| 仙居县| 韶关市| 黑河市| 谢通门县|