做法
重複地走訪要排序的數列,相鄰比較兩個元素,再根據條件進行交換。
實作
原始陣列。
1
   | $items = [5, 4, 3, 2, 1];
   | 
 
先試著做一次相鄰比較並交換値的迴圈。
1 2 3 4 5 6 7
   | for ($j = 0; $j < count($items) - 1 - $i; $j++) {     if ($items[$j] > $items[$j + 1]) {         $temp = $items[$j];         $items[$j] = $items[$j + 1];         $items[$j + 1] = $temp;     } }
  | 
 
輸出:
1 2 3 4
   | Array ( [0] => 4 [1] => 5 [2] => 3 [3] => 2 [4] => 1 ) Array ( [0] => 4 [1] => 3 [2] => 5 [3] => 2 [4] => 1 ) Array ( [0] => 4 [1] => 3 [2] => 2 [3] => 5 [4] => 1 ) Array ( [0] => 4 [1] => 3 [2] => 2 [3] => 1 [4] => 5 )
   | 
 
經過 4 次相鄰比較後,把 5 挪到最後面了。
這樣的迴圈重複做 4 遍可以得到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   | Array ( [0] => 4 [1] => 5 [2] => 3 [3] => 2 [4] => 1 ) Array ( [0] => 4 [1] => 3 [2] => 5 [3] => 2 [4] => 1 ) Array ( [0] => 4 [1] => 3 [2] => 2 [3] => 5 [4] => 1 ) Array ( [0] => 4 [1] => 3 [2] => 2 [3] => 1 [4] => 5 )
  Array ( [0] => 3 [1] => 4 [2] => 2 [3] => 1 [4] => 5 ) Array ( [0] => 3 [1] => 2 [2] => 4 [3] => 1 [4] => 5 ) Array ( [0] => 3 [1] => 2 [2] => 1 [3] => 4 [4] => 5 ) Array ( [0] => 3 [1] => 2 [2] => 1 [3] => 4 [4] => 5 )
  Array ( [0] => 2 [1] => 3 [2] => 1 [3] => 4 [4] => 5 ) Array ( [0] => 2 [1] => 1 [2] => 3 [3] => 4 [4] => 5 ) Array ( [0] => 2 [1] => 1 [2] => 3 [3] => 4 [4] => 5 ) Array ( [0] => 2 [1] => 1 [2] => 3 [3] => 4 [4] => 5 )
  Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
   | 
 
但會發現,後面已經排序過的部分不需要再排序,因此可以改良為:
1 2 3 4 5 6 7 8 9 10 11 12 13
   | function bubbleSort($items) {     for ($i = 0; $i < count($items) - 1; $i++) {         for ($j = 0; $j < count($items) - 1 - $i; $j++) {             if ($items[$j] > $items[$j + 1]) {                 $temp = $items[$j];                 $items[$j] = $items[$j + 1];                 $items[$j + 1] = $temp;             }         }     }
      return $items; }
  | 
 
輸出得到:
1 2 3 4 5 6 7 8 9 10 11 12 13
   | Array ( [0] => 4 [1] => 5 [2] => 3 [3] => 2 [4] => 1 ) Array ( [0] => 4 [1] => 3 [2] => 5 [3] => 2 [4] => 1 ) Array ( [0] => 4 [1] => 3 [2] => 2 [3] => 5 [4] => 1 ) Array ( [0] => 4 [1] => 3 [2] => 2 [3] => 1 [4] => 5 )
  Array ( [0] => 3 [1] => 4 [2] => 2 [3] => 1 [4] => 5 ) Array ( [0] => 3 [1] => 2 [2] => 4 [3] => 1 [4] => 5 ) Array ( [0] => 3 [1] => 2 [2] => 1 [3] => 4 [4] => 5 )
  Array ( [0] => 2 [1] => 3 [2] => 1 [3] => 4 [4] => 5 ) Array ( [0] => 2 [1] => 1 [2] => 3 [3] => 4 [4] => 5 )
  Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
   | 
 
程式碼