博学而笃志 切问而近思 仁在其中
详情
php中实现冒泡排序、快速排序、选择排序和插入排序等经典算法
作者:Aliot     发布时间:2017-07-02     评论:0     阅读:0

php中实现冒泡排序、快速排序、选择排序和插入排序等经典算法

时间:2014-04-17
// 冒泡排序   
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;   
}   
?>

查看本栏目更多精彩内容:http://www.bianceng.cn/webkf/PHP/


相关文章
loading......
最新动态
所有评论

loading......

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册