寫給媳婦兒的算法(四)——冒泡排序

【引言】我們都經(jīng)歷過新生開學(xué),一個(gè)班里幾十個(gè)同學(xué)抠蚣,軍訓(xùn)的時(shí)候我們需要按照身高站成一隊(duì),個(gè)子高的站在后面履澳,個(gè)子矮的站在前面嘶窄。如果你是班主任的話,你會(huì)怎么讓同學(xué)調(diào)整他們之間的位置距贷,最終讓所有的人都按照身高大小站好呢柄冲?

冒泡排序是一種通過兩兩對(duì)比的方式,依次找出最值的排序方式忠蝗。

算法過程

使用冒泡排序來進(jìn)行班級(jí)里面隊(duì)伍的排列现横,就像是魚在水里吐泡泡一樣(應(yīng)該會(huì)吐吧tx)。由于壓強(qiáng)跟水深有關(guān)阁最,所以泡泡從水底升到水面的過程中會(huì)逐漸的變大戒祠,最終變到最大升出水面。排列隊(duì)伍也是一樣速种,最高的那個(gè)人會(huì)在從前到后的兩兩對(duì)比中姜盈,最終站到隊(duì)伍的最后面。

泡泡升出水面.png

班主任在排隊(duì)的時(shí)候可以這么做(假設(shè)有 5 個(gè)同學(xué)):
1配阵、讓全班同學(xué) 不分大小 站成一列馏颂,身高分別為(隊(duì)伍從前到后):150 165 160 173 155。
2棋傍、從前向后兩兩比較救拉,首先比較1、2同學(xué):150 165 160 173 155瘫拣。
3亿絮、150 同學(xué)比 165 同學(xué)要矮,隊(duì)伍保持不動(dòng),轉(zhuǎn)而比較2壹无、3同學(xué):150 165 160 173 155葱绒。
4、165 同學(xué)比 160 同學(xué)要高斗锭,這樣地淀,兩位同學(xué) 互換位置,以保證后面的要比前面的高:150 160 165 173 155岖是。
5帮毁、繼續(xù)比較3、4同學(xué):150 160 165 173 155豺撑。
6烈疚、3 同學(xué)比 4 同學(xué)矮,所以隊(duì)伍不進(jìn)行變化:150 160 165 173 155聪轿。
7爷肝、繼續(xù)比較4、5同學(xué):150 160 165 173 155陆错。
8灯抛、前面的 4 同學(xué)比后面的 5 同學(xué)高,所以交換位置:150 160 165 155 173音瓷。

這樣就完成了第一次的隊(duì)伍規(guī)整对嚼,我們可以看到,進(jìn)行了第一次所有人的從前往后的兩兩對(duì)比绳慎,現(xiàn)在整只隊(duì)伍最高的那個(gè)人已經(jīng)站到了隊(duì)尾纵竖,就像魚吐泡泡一樣,最大的泡泡已經(jīng)浮出了水面杏愤。

繼續(xù)從頭到尾重復(fù)上面的過程靡砌,直到所有的人從前往后站隊(duì)成從小到大∩睿總體的過程就像是(隊(duì)伍從下往上乏奥,過程從前往后):
第一次整理:
155 155 155 155 155 173
173 173 173 173 173 155
160 160 165 165 160 160
165 165 160 160 165 165
150 150 150 150 150 150
第二次整理:
173 173 173 173 173 173
155 155 155 155 165 165
160 160 165 165 155 155
165 165 160 160 160 160
150 150 150 150 150 150
第三次整理:
173 173 173 173 173
165 165 165 165 165
155 155 160 160 160
160 160 155 155 155
150 150 150 150 150

就像這樣摆舟,像魚吐泡泡一樣亥曹,逐漸的整個(gè)隊(duì)伍就站成了從前往后,從大到到小的順序恨诱。站隊(duì)的過程媳瞪,就是前面的同學(xué)和后面的同學(xué)比較,互換位置的過程照宝。班主任就會(huì)很省事……

時(shí)間復(fù)雜度

當(dāng)然蛇受,冒泡排序可以進(jìn)行改進(jìn),增加一個(gè)標(biāo)志位厕鹃,如果一次遍歷中沒有發(fā)生值的交換兢仰,就證明整個(gè)數(shù)列都是有序的乍丈,這樣,最好的情況下就是一開始整個(gè)序列就是有序的把将,所以轻专,最好的情況下,時(shí)間復(fù)雜度是O(n)察蹲。

最壞的情況下请垛,需要反復(fù)遍歷所有的元素,這樣洽议,時(shí)間復(fù)雜度就會(huì)變成O(n^2)宗收。

所以平均時(shí)間復(fù)雜度為O(n^2)。

算法實(shí)現(xiàn)

#coding:utf-8
import numpy as np

def bubble_sort(data):
    data_length = len(data)
    for i in range(data_length, 0, -1):
        for j in range(1, i, 1):
            if  data[j] < data[j-1]:
                data[j], data[j-1] = data[j-1], data[j]

array = np.arange(20)
np.random.shuffle(array)
array = list(array)
print('輸入的數(shù)據(jù): {}'.format(array))
bubble_sort(array)
print('排序之后的數(shù)據(jù):{}'.format(array))

結(jié)果是:

冒泡排序的結(jié)果.png



上一篇:寫給媳婦兒的算法(三)——選擇排序
上一篇:寫給媳婦兒的算法(五)——插入排序

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亚兄,一起剝皮案震驚了整個(gè)濱河市混稽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌审胚,老刑警劉巖荚坞,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異菲盾,居然都是意外死亡颓影,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門懒鉴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诡挂,“玉大人,你說我怎么就攤上這事临谱×祝” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵悉默,是天一觀的道長城豁。 經(jīng)常有香客問我,道長抄课,這世上最難降的妖魔是什么唱星? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮跟磨,結(jié)果婚禮上间聊,老公的妹妹穿的比我還像新娘。我一直安慰自己抵拘,他們只是感情好哎榴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般尚蝌。 火紅的嫁衣襯著肌膚如雪迎变。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天飘言,我揣著相機(jī)與錄音氏豌,去河邊找鬼。 笑死热凹,一個(gè)胖子當(dāng)著我的面吹牛泵喘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播般妙,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼纪铺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了碟渺?” 一聲冷哼從身側(cè)響起鲜锚,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苫拍,沒想到半個(gè)月后芜繁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绒极,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年骏令,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垄提。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榔袋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铡俐,到底是詐尸還是另有隱情凰兑,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布审丘,位于F島的核電站吏够,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏滩报。R本人自食惡果不足惜锅知,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望露泊。 院中可真熱鬧喉镰,春花似錦旅择、人聲如沸惭笑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沉噩。三九已至捺宗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間川蒙,已是汗流浹背蚜厉。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畜眨,地道東北人昼牛。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像康聂,于是被迫代替她去往敵國和親贰健。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361