摘要:前言冒泡排序大概的意思是依次比較相鄰的兩個(gè)數(shù),然后根據(jù)大小做出排序,直至最后兩位數(shù)。由于在排序過(guò)程中總是小數(shù)往前放,大數(shù)往后放,相當(dāng)于氣泡往上升,所以稱作冒泡排序。
前言
冒泡排序大概的意思是依次比較相鄰的兩個(gè)數(shù),然后根據(jù)大小做出排序,直至最后兩位數(shù)。由于在排序過(guò)程中總是小數(shù)往前放,大數(shù)往后放,相當(dāng)于氣泡往上升,所以稱作冒泡排序。但其實(shí)在實(shí)際過(guò)程中也可以根據(jù)自己需要反過(guò)來(lái)用,大樹往前放,小數(shù)往后放。
實(shí)戰(zhàn)直接上代碼:
$demo_array[$j]) { $tmp = $demo_array[$i]; // 這里的tmp是臨時(shí)變量 $demo_array[$i] = $demo_array[$j]; // 第一次更換位置 $demo_array[$j] = $tmp; // 完成位置互換 } } } // 打印結(jié)果集 echo ""; var_dump($demo_array); echo "";
運(yùn)行結(jié)果:
array(13) { [0]=> int(2) [1]=> int(5) [2]=> int(6) [3]=> int(11) [4]=> int(15) [5]=> int(21) [6]=> int(23) [7]=> int(25) [8]=> int(32) [9]=> int(43) [10]=> int(54) [11]=> int(65) [12]=> int(82) }
從上面結(jié)果中,我們可以看出,數(shù)組中鍵值順序已經(jīng)被改變,排序成功。
如果說(shuō)上面的算法是將數(shù)組中的鍵值按照值得大小從小到大進(jìn)行排序,那么反之從大到小怎么操作呢?
很簡(jiǎn)單,只要修改一個(gè)比較符號(hào)就可以了,如下:
"; var_dump($demo_array); echo "";
運(yùn)行結(jié)果:
array(13) { [0]=> int(82) [1]=> int(65) [2]=> int(54) [3]=> int(43) [4]=> int(32) [5]=> int(25) [6]=> int(23) [7]=> int(21) [8]=> int(15) [9]=> int(11) [10]=> int(6) [11]=> int(5) [12]=> int(2) }
就這樣,輕松地改變了順序。
延伸如果仔細(xì)觀察以上代碼,就會(huì)發(fā)現(xiàn)有一個(gè)地方值得關(guān)注,就是互換變量值得地方。沒(méi)錯(cuò),這也是冒泡中的核心要點(diǎn),這個(gè)技巧掌握了,以后同樣可以用到其他地方。
這里我們就稍微聊聊這個(gè)。
原理:現(xiàn)在有A、B兩個(gè)變量,需求是將其值互換。
看到題目,我們首先可能會(huì)想到直接賦值,但是如果直接賦值,不論先將誰(shuí)賦值給誰(shuí),其中一個(gè)必定會(huì)被覆蓋,由此我們可以想出再弄出第三個(gè)變量C,暫時(shí)存儲(chǔ)A或B中的值,這樣就可以達(dá)到需求目標(biāo)了。
$c = $a; // 暫存 $a = $b; // b給a $b = $c; // 暫存的a值再給b
注:其實(shí)不需要第三個(gè)變量,也是可以達(dá)到互換A、B變量值的,可以借助substr()、str_replace()等方法,這里因?yàn)槭墙榻B冒泡排序的,所以不過(guò)多延伸了。
總結(jié)關(guān)于冒泡排序的就這么多,歸納起來(lái),主要就是兩點(diǎn):
循環(huán)比較
交換鍵值
能夠完成這兩點(diǎn),基本就OK了,當(dāng)然,關(guān)于冒泡排序的算法還有很多,這里只是其中一種,有興趣的同學(xué)可以自己研究下。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22032.html
摘要:總結(jié)比較排序算法都是空間復(fù)雜度為的原地排序算法,其中冒泡排序和插入排序兩兩比較不會(huì)交換相等的記錄,所以這兩種排序都是穩(wěn)定排序,而選擇排序只是記錄最小值最后進(jìn)行交換,所以會(huì)破壞相對(duì)順序,選擇排序不是穩(wěn)定算法。 冒泡排序 兩兩比較相鄰記錄的關(guān)鍵字,如果反序則交換,大的數(shù)字往下沉,一直到最大的出現(xiàn)在數(shù)組最后 function swap(&$x, &$y) { $temp = $x; ...
摘要:尋找非零元素?cái)?shù)組中所有元素排列組合后的最大值待排序數(shù)組排序方法參數(shù)校驗(yàn)排序算法快速排序冒泡排序拼接用例測(cè)試這里只對(duì)快速排序方法使用組測(cè)試用例并列舉如下。 首發(fā)于 樊浩柏科學(xué)院 問(wèn)題敘述:將一個(gè)非負(fù)元素?cái)?shù)組中的所有元素排列組合在一起,找出值最大的那個(gè)排列情況。例如 [0, 9, 523, 94, 10, 4],排列組合后值最大數(shù)為:9945234100。 showImg(https:/...
摘要:而在證明算法是正確的基礎(chǔ)上,第二步就是分析算法的時(shí)間復(fù)雜度。算法的時(shí)間復(fù)雜度反映了程序執(zhí)行時(shí)間隨輸入規(guī)模增長(zhǎng)而增長(zhǎng)的量級(jí),在很大程度上能很好反映出算法的優(yōu)劣與否。 showImg(https://segmentfault.com/img/remote/1460000016451712?w=800&h=341); 前言 雖然工作中,你覺(jué)得自己并沒(méi)有涉及到算法這方面的東西,但是算法是程序的...
摘要:冒泡排序冒泡排序英語(yǔ)是一種簡(jiǎn)單的排序算法。冒泡排序算法的運(yùn)作如下比較相鄰的元素。冒泡排序動(dòng)態(tài)圖代碼實(shí)現(xiàn)我們來(lái)逐行分析下。這里的減是為了不在遍歷之前排序好的元素。記錄交換的次數(shù),但代表沒(méi)有交換,序列已經(jīng)有序。 冒泡排序 冒泡排序(英語(yǔ):Bubble Sort)是一種簡(jiǎn)單的排序算法。它重復(fù)地遍歷要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過(guò)來(lái)。遍歷數(shù)列的工作是重復(fù)地進(jìn)行直...
閱讀 2025·2019-08-30 15:52
閱讀 2987·2019-08-29 16:09
閱讀 1333·2019-08-28 18:30
閱讀 2459·2019-08-26 12:24
閱讀 1107·2019-08-26 12:12
閱讀 2281·2019-08-26 10:45
閱讀 578·2019-08-23 17:52
閱讀 837·2019-08-23 16:03