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);
    // 遍历数组
    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;
    // 从索引的第二个开始遍历数组
    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;
}
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值