氣泡排序大概的意思是依次比較相鄰的兩個數,然後根據大小做出排序,直至最後兩位數。由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上公升,所以稱作氣泡排序。但其實在實際過程中也可以根據自己需要反過來用,大樹往前放,小數往後放。
直接上**:
<?php
/** * 氣泡排序演算法示例
*/// 這裡以一維陣列做演示
$demo_array = array(23,15,43,25,54,2,6,82,11,5,21,32,65);
// 第一層for迴圈可以理解為從陣列中鍵為0開始迴圈到最後乙個
for ($i=0;$i// 第二層將從鍵為$i的地方迴圈到陣列最後
for ($j=$i+1;$j// 比較陣列中相鄰兩個值的大小
if ($demo_array[$i] > $demo_array[$j])
}}// 列印結果集
echo
'';var_dump($demo_array);
echo
'
';
執行結果:
array(13)
從上面結果中,我們可以看出,陣列中鍵值順序已經被改變,排序成功。
如果說上面的演算法是將陣列中的鍵值按照值得大小從小到大進行排序,那麼反之從大到小怎麼操作呢?
很簡單,只要修改乙個比較符號就可以了,如下:
<?php
/** * 氣泡排序演算法示例
*/// 這裡以一維陣列做演示
$demo_array = array(23,15,43,25,54,2,6,82,11,5,21,32,65);
// 第一層for迴圈可以理解為從陣列中鍵為0開始迴圈到最後乙個
for ($i=0;$i// 第二層將從鍵為$i的地方迴圈到陣列最後
for ($j=$i+1;$j// 比較陣列中相鄰兩個值的大小
if ($demo_array[$i] < $demo_array[$j])
}}// 列印結果集
echo
'';var_dump($demo_array);
echo
'
';
執行結果:
array(13)
就這樣,輕鬆地改變了順序。
如果仔細觀察以上**,就會發現有乙個地方值得關注,就是互換變數值得地方。沒錯,這也是冒泡中的核心要點,這個技巧掌握了,以後同樣可以用到其他地方。
這裡我們就稍微聊聊這個。
現在有a、b兩個變數,需求是將其值互換。
看到題目,我們首先可能會想到直接賦值,但是如果直接賦值,不論先將誰賦值給誰,其中乙個必定會被覆蓋,由此我們可以想出再弄出第三個變數c,暫時儲存a或b中的值,這樣就可以達到需求目標了。
$c = $a; // 暫存
$a = $b; // b給a
$b = $c; // 暫存的a值再給b
注:其實不需要第三個變數,也是可以達到互換a、b變數值的,可以借助substr()、str_replace()等方法,這裡因為是介紹氣泡排序的,所以不過多延伸了。
關於氣泡排序的就這麼多,歸納起來,主要就是兩點:
迴圈比較
交換鍵值
能夠完成這兩點,基本就ok了,當然,關於氣泡排序的演算法還有很多,這裡只是其中一種
PHP排序 氣泡排序
這個應該是最大眾的排序了。也算是簡單排序演算法中知名度最高的。氣泡排序的思路是怎麼樣的呢?首先就是先比較相鄰的兩個元素,如果滿足條件,就交換,否則不動。然後是再比較接下來的兩個相鄰的元素,然後滿足條件就交換,否則依然不動。依次迴圈操作下去,最終乙個元素,會固定在最下邊。舉例 陣列有5個元素從小到大排...
php 氣泡排序
基本概念是 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重複以上過程,仍從第一對數開始比較 因為可能由於第2個數和第3個數的交換,使得第1個...
PHP氣泡排序
基本概念 氣泡排序 bubblesort 的基本概念是 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到...