氣泡排序

laraverer 發表於 2021-06-10

PHP 氣泡排序

這個應該是最大眾的排序了。也算是簡單排序演算法中知名度最高的。

氣泡排序的思路是怎麼樣的呢?:boom: :boom::boom: :punch:

  1. 首先就是比較相鄰的兩個元素,如果滿足條件,就交換,否則不動。
  2. 然後是在比較接下來的兩個相鄰的元素,然後滿足條件就叫交換,否則依然不動
  3. 依次迴圈下去,最終一個元素會固定在最下邊。

舉個例子:bowtie:

陣列有5個元素從小到大排序,首先第一個和第二個比,第一個比第二個大就交換。否則不操作。然後第二個和第三個比較,第二個大於第三個就交換,否則不變動。知道對比到第四個和第五個對比。
經過一輪的迴圈對比,最大的數字就下沉到最下邊了,小的數字逐漸向上浮出。

//氣泡排序
function bubble_sort($arr)
{
    $len = count($arr);
    for($i = 0;$i < $len-1;$i++){//迴圈比較
        for($j = 0;$j < $len-$i-1;$j++){//當前輪相鄰元素迴圈對比
            if($arr[$j] > $arr[$j+1]){//如果前邊的大於後邊的,交換資料
                $tmp = $arr[$j];//將當前變數賦值給臨時變數
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $tmp;
             }                       
         }


     }
     return $arr;
}

$arr = [3,45,5,5,9];
print_r(bubble_sort($arr));

當然還有另一種寫法:

 //排序
 function paixu($arr)
  {
     $len = count($arr);
     for ($i = 0; $i < $len - 1; $i++) {//迴圈比對的輪數
          for ($j = $i + 1; $j < $len; $j++) {//從第二個開始迴圈,迴圈到最後一個,逐一和第一個比較
             if ($arr[$i] > $arr[$j]) {//前邊大於後邊的則交換
                  $tmp = $arr[$i];
                  $arr[$i] = $arr[$j];
                 $arr[$j] = $tmp;
             }
         }
     }
     return $arr;
 }
$arr = [5,2,4,7,9,4,2,6,8,3];
 print_r(paixu($arr))

以上是我對於冒泡演算法的總結,希望這篇文章可以幫助到大家。:bowtie: :bowtie:

本作品採用《CC 協議》,轉載必須註明作者和本文連結