首頁 >後端開發 >php教程 >簡單的理解PHP冒泡排序

簡單的理解PHP冒泡排序

韦小宝
韦小宝原創
2018-03-06 13:38:391756瀏覽

PHP中涉及到多種排序,而冒泡排序應該是我用的最鬧心的一種排序,弄了老半天還是沒太懂,這篇簡單講述PHP冒泡排序的很適合像我一樣不太懂冒泡排序的東西看哦!

1.冒泡演算法

看了幾篇關於冒泡的文章,但是總是對於每次循環的邊界值思路講的比較籠統。

不是很容易被新手記住,我自己平常也是硬記下來的。

但是對於演算法,硬記,時間長了還是容易忘記,所以自己寫了一次,把每次思路盡量寫下來,便於理解,理解了容易加深映像,不容易忘記了。

氣泡演算法,核心是

    1.循環比對  每次比對相鄰2個陣列的大小,然後將最大的陣列放到後面,這樣所有比對循環一次,就會把數組中最大的數放到數組最後

    2. 然後重複循環(重複上面的比對循環):此時循環的時候最後一個值是不需要參加循環了,因為已經確定是最大的那個了。也就是說,重複循環,比對陣列越來越少。最後只剩下一個陣列元素了。循環結束

程式碼層看:

$arr=array(5,4,3,6,7,1,2,10,8,9);

先從兩兩比對開始看

if($arr[$i]>$arr[$i+1]){//相邻比较 这个应该比较容易理解吧
        $tem=$arr[$i];
        $arr[$i]=$arr[$i+1];
        $arr[$i+1]=$tem;
    }

以上程式碼就是比對2個陣列相鄰的值大小,大的放後面。可以看出來 $i 最大就是數組索引前一位的,否則 $arr[$i+1]不存在了,無法比較。也就是說 $i<count($ar)-1;$i初始值為0

先從內層比對迴圈開始看

#一般for循環 這麼寫

for($i=0;$i<$xx;$i++){
    if($arr[$i]>$arr[$i+1]){//相邻比较 这个应该比较容易理解吧
        $tem=$arr[$i];
        $arr[$i]=$arr[$i+1];
        $arr[$i+1]=$tem;
    }
} 

上面思路說了,每次比對循環都是從開頭第一個元素開始所以$i 起始值為0, 重複循環一次,下次循環就少比對一個元素。這裡$xx要越來越小; 那這個$xx怎麼確定呢?

$xx第一次循環值是多少 ?上面兩兩比對得出結論 count($ar)-1  

$xx 最後一次值該是多少呢?上面兩兩比對得出結論 是1。

也就是說$xx  為  count($arr)-$k  $k是累加的比對循環可改為(重複循環每循環一次)

for($i=0;$i<count($arr)-$k;$i++){
    if($arr[$i]>$arr[$i+1]){//相邻比较
        $tem=$arr[$i];
        $arr[$i]=$arr[$i+1];
        $arr[$i+1]=$tem;
    }
} 

再看這個$k想想這個$k不就是隨著重複循環在累積的嗎? 把重複循環程式碼加上如下

我們再來看下$k是怎麼確定邊界值的上面說了, $xx 邊界值是count($arr)-1 到1   已經定義  那麼數學演算法$k邊界值也就出來了為1到 count($arr)-1

寫入到迴圈裡也就是$k=1;$k

整理下就是

for($k=1;$k<count($arr);$k++){
    for($i=0;$i<count($arr)-$k;$i++){ 
        if($arr[$i]>$[$i+1]){
            $temparr= $arr[$i];
            $arr[$i] =$arr[$i+1];
            $arr[$i+1] = $temparr;
        }
    }
}

希望大家可以看的懂,還是多練練比較好,有的時候我們不明白的知識,自己多寫兩遍寫著寫著就懂了!

以上是簡單的理解PHP冒泡排序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn