1. 程式人生 > >基礎算法(1):冒泡排序

基礎算法(1):冒泡排序

一定的 fun 基礎算法 重復 基礎上 ray 感受 大小 思路

冒泡排序 是一種比較簡單的排序算法,其本質是相鄰的兩個元素進行大小比較,最終使得所有的元素形成從小到大或者從大到小的排列

算法原理

  1. 比較相鄰的元素,不相等,就進行交換
  2. 對所有的相鄰元素進行第1步的操作,第一輪比較下來,最大(小) 的元素排在了最尾部
  3. 相鄰的元素比較的次數在上一輪比較的基礎上減去1次,進入下一輪的比較,,重復第1,2步
  4. 最大(小),第二大(小),第三大(小)......的元素依次會拍到元素的最尾部
  5. 當比較次數為1的時候,執行完第1步,所有比較結束

冒泡排序是一種穩定的排序算法

代碼示例

<?php

function bubbing_sort(array $arr)
{
    // 統計需要排序的元素個數
    $len = count($arr);
    // 控制進行幾輪比較
    for($j = 1; $j < $len ;$j++)
    {
        // 相鄰的一組元素,兩兩之間需要比較的次數
        for($i = 0 ; $i < $len-$j ;$i++)
        {
            // 元素的排列方向 從小到大或者從大到小
            if($arr[$i] > $arr[$i+1])
            {
                // 相鄰的兩個元素大小比較符合條件,兩兩交換位置
                $temp = $arr[$i];
                $arr[$i] = $arr[$i+1];
                $arr[$i+1] = $temp ;
            }
        }
    }
    return $arr ;
}
$arr = [99,10,88,23,13,67];
var_dump(bubbing_sort($arr));
// output
/*array (size=6)
  0 => int 10
  1 => int 13
  2 => int 23
  3 => int 67
  4 => int 88
  5 => int 99*/

冒泡排序的核心是相鄰元素之間的兩兩比較,比較完一輪,還有元素沒有比較完,進入下一輪的比較,直到所有的元素都按照一定的順序呈現出來.

PS : 要是沒有直觀的感受,可以裁剪出幾個小紙片,每個小紙片上寫上數字(相當於一個元素),將這些小紙片放在一塊按照冒泡排序實現思路進行比較.

基礎算法(1):冒泡排序