再複習PHP的排序

早上起來,花了點時間寫了一下PHP的冒泡排序和快速排序,作爲對以前知識的複習。

冒泡排序:

<?
function bubble_sort($array) {
    $size = count($array);
    if ($size <= 1) {
        return $array;
    }

    for ($i=0; $i<$size; $i++) {
        // 開始冒泡,從末尾開始,小的元素浮上來
        for ($j=$size-1; $j>$i; $j--) {
            if ($array[$j] < $array[$j-1]) {
                $temp = $array[$j];
                $array[$j] = $array[$j-1];
                $array[$j-1] = $temp;
            }
        }
    }

    return $array;
}

$array = array(10, 1, 4, 6, 8, 2, 333, 5, 65, 90);
print_r(bubble_sort($array));

快速排序:

<?php
function quick_sort($array) {
    $size = count($array);
    if ($size <= 1) {
        return $array;
    }
    
    // 首元素作爲比較對象
    $key = $array[0];
    $left = array();
    $right = array();

    // 小的放左邊, 大的放右邊
    for ($i=1; $i<$size; $i++) {
        if ($array[$i] < $key) {
            $left[] = $array[$i];
        } else {
            $right[] = $array[$i];
        }
    }

    // 遞歸處理左邊和右邊
    $left = quick_sort($left);
    $right = quick_sort($right);

    // 歸併
    $array = array_merge($left, array($key), $right);
    return $array;
}

$array = array(10, 1, 4, 6, 8, 2, 333, 5, 65, 90);
pr(quick_sort($array));

快速排序還有幾個變種,例如:隨機化快速排序,平衡快速排序,外部快速排序,三路基數快速排序,在今後的日子裏,慢慢研究它們。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章