成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP冒泡排序(Bubble Sort)算法詳解

sf190404 / 2131人閱讀

摘要:前言冒泡排序大概的意思是依次比較相鄰的兩個(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

相關(guān)文章

  • 比較排序算法PHP

    摘要:總結(jié)比較排序算法都是空間復(fù)雜度為的原地排序算法,其中冒泡排序和插入排序兩兩比較不會(huì)交換相等的記錄,所以這兩種排序都是穩(wěn)定排序,而選擇排序只是記錄最小值最后進(jìn)行交換,所以會(huì)破壞相對(duì)順序,選擇排序不是穩(wěn)定算法。 冒泡排序 兩兩比較相鄰記錄的關(guān)鍵字,如果反序則交換,大的數(shù)字往下沉,一直到最大的出現(xiàn)在數(shù)組最后 function swap(&$x, &$y) { $temp = $x; ...

    浠ラ箍 評(píng)論0 收藏0
  • 求非負(fù)元素?cái)?shù)組所有元素能組合的最大字符串

    摘要:尋找非零元素?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:/...

    xiongzenghui 評(píng)論0 收藏0
  • PHP算法之四大基礎(chǔ)算法

    摘要:而在證明算法是正確的基礎(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)有涉及到算法這方面的東西,但是算法是程序的...

    isLishude 評(píng)論0 收藏0
  • Python 算法冒泡排序

    摘要:冒泡排序冒泡排序英語(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)行直...

    LeexMuller 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

sf190404

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<