冒泡排序与选择排序(两种)

1、冒泡排序:

<?php
$arr=[18,22,12,15,23,9];
//计算长度,也就是值的数量
$n = count($arr);
//控制每次趟数 (列数)
for($i=0;$i<$n-1;$i++){
    //控制每趟里面替换次数  (行数)
    for($k=0;$k<$n-1-$i;$k++){
        //前面的值大于后面的值,也就是从小到大排序
        if($arr[$k]>$arr[$k+1]){
            //1、用第三个变量做中转
//            $temp = $arr[$k];
//            $arr[$k] = $arr[$k+1];
//            $arr[$k+1] = $temp;
//            2、用list函数
            list($arr[$k],$arr[$k+1]) = array($arr[$k+1],$arr[$k]);
        }
    }

}
var_dump($arr);

2.1选择排序(以最小值进行替换)

//选择排序  每次循环轮数都确定一个最小值,最小的值跟最前面的数字进行替换,
$arr=[18,22,12,15,23,9];
$len = count($arr);
//大循环,控制轮数
for ($i=0;$i<$len-1;$i++) {
    //将最小的键赋值
    $p = $i;
    //小循环  比较里面的最小值
    for ($j = $i + 1; $j < $len; $j++) {
        //判断最小值,记录键赋值
        if ($arr[$j] < $arr[$p]) {
            $p = $j;
        }
    }
    //进行替换
    if ($p != $i) {
        list($arr[$p],$arr[$i]) = array($arr[$i],$arr[$p]);
    }
}
echo '<pre>';
print_r($arr);

2.2选择排序(以最大值进行替换)

//每次循环轮数都确定一个最大值,最大值跟最后一个数字进行替换
$arr=[18,22,12,15,23,9];
$n = count($arr);
//大循环  控制轮数
for ($i=0;$i<$n-1;$i++){
    //假设以第一个数为最大的数
    $max = $arr[0];
    $max_key = 0;
    //小循环  控制比较次数
    for ($j=0;$j<$n-$i;$j++){
//        如果后面的数比第一个大,就记录键值
        if($arr[$j]>$max){
            $max = $arr[$j];
            $max_key = $j;
        }
    }
//    替换值  最大的值,跟最后一个替换   $n-1-$i  是每轮之后最后一个键
    if($max_key != $n-1-$i){
        list($arr[$n-1-$i],$arr[$max_key]) = array($arr[$max_key],$arr[$n-1-$i],);
    }

}
echo '<pre>';
print_r($arr);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值