PHP 實現各種排序演算法

來源:互聯網
上載者:User

標籤:

<?php
// 1、冒泡排序
function BubbleSort($arr) {
    // 獲得數組總長度
    $num = count($arr);
    // 正向遍曆數組
    for ($i = 1; $i < $num; $i++) {
        // 反向遍曆
        for ($j = $num - 1; $j >= $i ; $j--) {
            // 相鄰兩個數比較
            if ($arr[$j] < $arr[$j-1]) {
                // 暫存較小的數
                $iTemp = $arr[$j-1];
                // 把較大的放前面
                $arr[$j-1] = $arr[$j];
                // 較小的放後面
                $arr[$j] = $iTemp;
            }
        }
    }
    return $arr;
}
// 2、交換法排序
function ExchangeSort($arr){
    $num = count($arr);
    // 遍曆數組
    for ($i = 0;$i < $num - 1; $i++) {
        // 獲得當前索引的下一個索引
        for ($j = $i + 1; $j < $num; $j++) {
            // 比較相鄰兩個的值大小
            if ($arr[$j] < $arr[$i]) {
                // 暫存較小的數
                $iTemp = $arr[$i];
                // 把較大的放前面
                $arr[$i] = $arr[$j];
                // 較小的放後面
                $arr[$j] = $iTemp;
            }
        }
    }
    return $arr;
}
// 3、選擇法排序
function SelectSort($arr) {
    // 獲得數組總長度
    $num = count($arr);
    // 遍曆數組
    for ($i = 0;$i < $num-1; $i++) {
        // 暫存當前值
        $iTemp = $arr[$i];
        // 暫存當前位置
        $iPos = $i;
        // 遍曆當前位置以後的資料
        for ($j = $i + 1;$j < $num; $j++){
            // 如果有小於當前值的
            if ($arr[$j] < $iTemp) {
                // 暫存最小值
                $iTemp = $arr[$j];
                // 暫存位置
                $iPos = $j;
            }
        }
        // 把當前值放到算好的位置
        $arr[$iPos] = $arr[$i];
        // 把當前值換成算好的值
        $arr[$i] = $iTemp;
    }
    return $arr;
}
// 4、插入法排序
function InsertSort($arr){
    $num = count($arr);
    // 遍曆數組
    for ($i = 1;$i < $num; $i++) {
        // 獲得當前值
        $iTemp = $arr[$i];
        // 獲得當前值的前一個位置
        $iPos = $i - 1;
        // 如果當前值小於前一個值切未到數組開始位置
        while (($iPos >= 0) && ($iTemp < $arr[$iPos])) {
            // 把前一個的值往後放一位
            $arr[$iPos + 1] = $arr[$iPos];
            // 位置遞減
            $iPos--;
        }
        $arr[$iPos+1] = $iTemp;
    }
    return $arr;
}
// 5、快速排序
function QuickSort($arr){
    $num = count($arr);
    $l = $r = 0;
    // 從索引的第二個開始遍曆數組
    for ($i = 1;$i < $num; $i++) {
        // 如果值小於索引1
        if ($arr[$i] < $arr[0]) {
            // 裝入左索引數組(小於索引1的資料)
            $left[] = $arr[$i];
            $l++;
        } else {
            // 否則裝入右索引中(大於索引1的資料)
            $right[] = $arr[$i];
            $r++; //
        }        
    }
    // 如果左索引有值 則對左索引排序
    if($l > 1) {
        $left = QuickSort($left);
    }
    // 排序後的數組
    $new_arr = $left;
    // 將當前數組第一個放到最後
    $new_arr[] = $arr[0];
    // 如果又索引有值 則對右索引排序
    if ($r > 1) {
        $right = QuickSort($right);
    }
    // 根據右索引的長度再次增加資料
    for($i = 0;$i < $r; $i++) {
        $new_arr[] = $right[$i];
    }
    return $new_arr;
}
?>

PHP 實現各種排序演算法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.