PHP之经典排序算法

<?php
echo '<br>';
/**
 * 冒泡排序
 */
function bubbleSort(& $list){
    //外层循环控制需要比较的趟数
    for($i=1, $len=count($list); $i<$len; ++$i){
        //内层循环控制参与比较的元素
        for($j=0; $j<$len-$i; ++$j){
            if($list[$j]>$list[$j+1]){
            	//前面比后面大就交换位置
                $tmp = $list[$j];
                $list[$j] = $list[$j+1];
                $list[$j+1] = $tmp;
            }
        }
    }
    return true;
}
$list_old = array(35,23,14,89,3,67,23);
bubbleSort($list_old);
print_r($list_old);
?>
<?php
echo '<br>';
/**
 * 简单选择排序
 */
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 true;
}
$list_old = array(35,23,14,89,3,67,23);
SelectSort($list_old);
print_r($list_old);
?>
<?php
echo '<br>';
/**
 * 插入排序
 */
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;
}
$list_old = array(35,23,14,89,3,67,23);
InsertSort($list_old);
print_r($list_old);
?>
<?php
echo '<br>';
/**
 * 快速排序
 */
function quickSort($list){
    $len = count($list);
    if($len==1 || $len ==0){
        return $list;
    }
    $key = $list[0];
    //初始化两个数组
    $small = $big = array();
    for($i=1;$i<$len;++$i){
        if($list[$i]<$key){
            $small[] = $list[$i];
        }else{
            $big[] = $list[$i];
        }
    }
    $small_sort = quickSort($small);
    $big_sort = quickSort($big);
    return array_merge($small_sort, array($key), $big_sort);
}
$list_old = array(35,23,14,89,3,67,23);
$list_sort = quickSort($list_old);
print_r($list_old);
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值