程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php中實現冒泡排序、快速排序、選擇排序和插入排序等經典算法

php中實現冒泡排序、快速排序、選擇排序和插入排序等經典算法

編輯:PHP綜合
// 冒泡排序   
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;   
}   
       
// 交換法排序   
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;   
}   
       
// 選擇法排序   
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;   
}   
       
// 插入法排序   
function InsertSort($arr){   
    $num = count($arr);   
    // 遍歷數組
    // http://www.bianceng.cn
    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;   
}   
       
// 快速排序   
function QuickSort($arr){   
    $num = count($arr);   
    $l = $r = 0;   
    $left = $right = array();   
    // 從索引的第二個開始遍歷數組   
    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;   
}   
?>

查看本欄目

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved