PHP常见算法 - 选择排序 排序步骤输出展示

// 将数组由小到大排序
$arr = [3, 4, 2, 8, 9, 1, 6];
echo json_encode($arr).'<br/><br/>';

// 1、需要选择的次数,每次只能选择一个最大或者最小值
for ($i = 0, $len = count($arr); $i < $len; $i++) {
    // 2、假设第一个值就是最小值
    $min = $i;

    echo '第'.($i+1).'次的min值:'.$arr[$min].'<br/>';

    echo '内层输出:<br/>';
    // 3、将最小值和其他剩余值一一比较
    for ($j = 1 + $i, $len = count($arr); $j < $len; $j++) {
        // 4、找到最小值
        if ($arr[$min] > $arr[$j]) {
            $min = $j;
        }
        echo $arr[$j].'(k:'.$j.')<br/>';
    }

    // 输出每次找到的最小值
    echo '内层排序得到的最小值 k:'.$min.'--val:'.$arr[$min].'<br/><br/>';

    // 5、当前值与最小值交换位置
    if ($min != $i) {
        $temp = $arr[$i];
        $arr[$i] = $arr[$min];
        $arr[$min] = $temp;
    }

    // 输出每次排序插入数据的值
    echo '第'.($i+1).'圈的结果:'.json_encode($arr).'<br/><br/><br/>';
}

echo json_encode($arr);

输出的结果:

---------------------------------------------------------------------------------------------------------------------------------

源数组:[3,4,2,8,9,1,6]

第1次的min值:3
内层输出:
4(k:1)
2(k:2)
8(k:3)
9(k:4)
1(k:5)
6(k:6)
内层排序得到的最小值 k:5--val:1

第1圈的结果:[1,4,2,8,9,3,6]


第2次的min值:4
内层输出:
2(k:2)
8(k:3)
9(k:4)
3(k:5)
6(k:6)
内层排序得到的最小值 k:2--val:2

第2圈的结果:[1,2,4,8,9,3,6]


第3次的min值:4
内层输出:
8(k:3)
9(k:4)
3(k:5)
6(k:6)
内层排序得到的最小值 k:5--val:3

第3圈的结果:[1,2,3,8,9,4,6]


第4次的min值:8
内层输出:
9(k:4)
4(k:5)
6(k:6)
内层排序得到的最小值 k:5--val:4

第4圈的结果:[1,2,3,4,9,8,6]


第5次的min值:9
内层输出:
8(k:5)
6(k:6)
内层排序得到的最小值 k:6--val:6

第5圈的结果:[1,2,3,4,6,8,9]


第6次的min值:8
内层输出:
9(k:6)
内层排序得到的最小值 k:5--val:8

第6圈的结果:[1,2,3,4,6,8,9]


第7次的min值:9
内层输出:
内层排序得到的最小值 k:6--val:9

第7圈的结果:[1,2,3,4,6,8,9]


结果:[1,2,3,4,6,8,9]

---------------------------------------------------------------------------------------------------------------------------------

以前对于选择算法,就是囫囵吞枣的理解,可今天当这样,将每次遍历的结果,都打印出来的时候,所有的一切都清明了。

理解也更深一层了!

记录一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值