Python實(shí)現(xiàn)冒泡排序

冒泡排序(Bubble Sort)东帅,是經(jīng)典的排序算法咆爽,基本上我們學(xué)習(xí)任何語言都會接觸到冒泡排序霞赫。
它的算法思想是腮介,重復(fù)地遍歷要排序的列表,一次比較兩個元素端衰,如果他們的順序錯誤就把他們交換過來叠洗。遍歷列表的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該列表已經(jīng)排序完成旅东。
這個算法的名字由來是因?yàn)樵酱蟮脑貢?jīng)由交換慢慢“浮”到數(shù)列的頂端灭抑,故名。
比如我們有下面這樣一個列表:

li = [10,8,4,7,5]

每次遍歷列表每個元素抵代,然后比較前后兩個元素的大小腾节,如果前面的數(shù)大于后面的數(shù),就交換位置主守,否則什么都不做禀倔。

內(nèi)層循環(huán):

下面是第一次遍歷后的效果,我們將列表豎起來参淫,可以看到最大值(10)像一條小魚吐的一個泡泡逐漸冒到了水面:


第一次冒泡

這樣我們可以確定一個程序上的循環(huán):

for j in range(len(li)-1):      # 列表中一個5個數(shù)救湖,比較為兩兩比較,因此實(shí)際次數(shù)為4次
    if li[j] > li[j + 1]:       # 判斷前面的數(shù)是否大于后面的數(shù)
        li[j], li[j + 1] = li[j + 1], li[j]   #大于則交換位置

語句解釋:
len(li) - 1:len(li)獲取列表li中的元素個數(shù)涎才;這里我們只進(jìn)行一次循環(huán)的情況鞋既,循環(huán)的次數(shù)為元素的個數(shù)-1力九;
li[j] > li[j + 1]:就是比較大小啦;
li[j], li[j + 1] = li[j + 1], li[j]:Python中的多元賦值邑闺,也是一種很方便的交換變量值的方式跌前,省去了中間變量。

li[j], li[j + 1] = li[j + 1], li[j] 

等價于

temp = li[j]
li[j] = li[j+1]
li[j+1]=temp

第一輪比較已經(jīng)確定最大值10陡舅,因此后面的比較10不需要參與抵乓;


剩下的冒泡

第二輪比較就是len(li) -1-1,本來比較就是len(li) -1靶衍,已經(jīng)有一個值不用參與了灾炭,則需要再減去1,第二輪確定次大值8颅眶;
第三輪時10蜈出,8已經(jīng)確定,因此比較的次數(shù)就變成了 len(li) -1-2涛酗;
以此類推铡原,比較的次數(shù)實(shí)際是在以遞減的方式減少;
因此可以確定內(nèi)層循環(huán)的最終寫法:

for j in range(len(li)-1-i):      # i為一個遞增的數(shù)商叹,減去遞增燕刻,就是遞減嘛

每一輪循環(huán)就是將一個尚未排序的最大值進(jìn)行了一次冒泡。

外層循環(huán):

內(nèi)層循環(huán)已確定沈自,外層循環(huán)就簡單了酌儒。
每次冒泡確定一個最大值,那么n個數(shù)比較枯途,只需要進(jìn)行n-1次冒泡就行了忌怎。

for i in range(len(li)-1):      # n-1次冒泡

最終結(jié)果:

li = [10,8,4,7,5]
for i in range(len(li)-1):
    for j in range(len(li)-1-i):      
        if li[j] > li[j + 1]:      
            li[j], li[j + 1] = li[j + 1], li[j]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市酪夷,隨后出現(xiàn)的幾起案子榴啸,更是在濱河造成了極大的恐慌,老刑警劉巖晚岭,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸥印,死亡現(xiàn)場離奇詭異,居然都是意外死亡坦报,警方通過查閱死者的電腦和手機(jī)库说,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來片择,“玉大人潜的,你說我怎么就攤上這事∽止埽” “怎么了啰挪?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵信不,是天一觀的道長。 經(jīng)常有香客問我亡呵,道長抽活,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任锰什,我火速辦了婚禮下硕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘汁胆。我一直安慰自己卵牍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布沦泌。 她就那樣靜靜地躺著,像睡著了一般辛掠。 火紅的嫁衣襯著肌膚如雪谢谦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天萝衩,我揣著相機(jī)與錄音回挽,去河邊找鬼。 笑死猩谊,一個胖子當(dāng)著我的面吹牛千劈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播牌捷,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼墙牌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了暗甥?” 一聲冷哼從身側(cè)響起喜滨,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撤防,沒想到半個月后虽风,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寄月,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年辜膝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漾肮。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡厂抖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出初橘,到底是詐尸還是另有隱情验游,我是刑警寧澤充岛,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站耕蝉,受9級特大地震影響崔梗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜垒在,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一蒜魄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧场躯,春花似錦谈为、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至签舞,卻和暖如春秕脓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背儒搭。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工吠架, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搂鲫。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓傍药,卻偏偏與公主長得像,于是被迫代替她去往敵國和親魂仍。 傳聞我的和親對象是個殘疾皇子拐辽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序蓄诽,而外部排序是因排序的數(shù)據(jù)很大薛训,一次不能容納全部...
    蟻前閱讀 5,191評論 0 52
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序仑氛,而外部排序是因排序的數(shù)據(jù)很大乙埃,一次不能容納全部...
    每天刷兩次牙閱讀 3,733評論 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個記錄插入到已排序好...
    依依玖玥閱讀 1,262評論 0 2
  • 前言 八大排序,三大查找是《數(shù)據(jù)結(jié)構(gòu)》當(dāng)中非尘忉基礎(chǔ)的知識點(diǎn)介袜,在這里為了復(fù)習(xí)順帶總結(jié)了一下常見的八種排序算法。常見的...
    LeeLom閱讀 97,332評論 41 662
  • 春海姓張出吹,脾氣不錯遇伞,我們無論大人小孩都叫他春海。他年青的時候當(dāng)過兵捶牢,復(fù)員結(jié)婚生了一個虎頭虎腦的兒子和三個性格迥異的...
    夜班的生生閱讀 281評論 0 0