php选择排序,使用PHP完成选择排序算法

摘要:

编程语言千千万,都离不开各种排序,比如比较典型的冒泡排序、快速排序、插入排序等,当然还有为之所动容的猴子排序、睡眠排序!!!本文只讲如何使用PHP实现选择排序的算法!

原理分析

本次使用的选择排序数组数据如下:$arr1 = array(18, 22, 12,15,23,9);

选择排序大致过程:

遍历一个数组,在此过程中,找出数组中的最大值及其位置。然后将该最大值的单元,跟数组的最后一个单元“交换位置”,这样进行一趟,数组中的最大值就一定放在最后位置了。

将上述过程中剩余的数据继续遍历一次,并做同样的事情,则此时剩余部分的最大值也能够放在剩余部分的最后位置——对整体而言就是倒数第二的位置。

依此类推。。。。。。。进行若干次,就排好了。

下方图中所示为上面所列举的算法过程:

6d27afabe8be213ce623efb1c485f47a.gif

规律总结

1.要进行从头到尾找出其中的最大值(及下标),并进行交换的趟数为$n-1,$n为数组长度

2.每一趟要做的事情是:a)找最大值;b)并将该最大值跟这一趟的最后一项进行交换;

3.每一趟要从中找最大值的数据个数都比前一趟少1,其中第一趟有$n个。

代码编写

下面代码为选择排序写法://数组数据

$arr1 = array(18, 22, 12, 15, 23, 9);

echo "交换前: " . implode('-', $arr1); //将该数组的所有项用给定字符"连接起来".

$n = count($arr1);

//大循环,控制进行从数组中找最大值的趟数:(数组下标0开始,需要$n-1)

for ($i = 0; $i 

//a)找最大值(及下标):(趟数越大,次数越少)

//这个循环是在其中某一趟中从前(若干)个数据中去找最大值

$max = $arr1[0];  //取出这些数据中的第一项,假设作为最大值

$max_key = 0;  //数据对应的下标

//内层循环,控制比较次数

for ($k = 0; $k 

if ($arr1[$k] > $max) {

$max = $arr1[$k];

$max_key = $k;

}

}

//b)交换:

$temp = $arr1[$max_key];  //为这一趟找出来的最大值的下标

$arr1[$max_key] = $arr1[$n - 1 - $i];  //$n-1-$i为这一趟最后的一项下标

$arr1[$n - 1 - $i] = $temp;

}

echo "
交换后: " . implode('-', $arr1);

6d27afabe8be213ce623efb1c485f47a.gif

6d27afabe8be213ce623efb1c485f47a.gif

感谢您的支持,我会继续努力的!

6d27afabe8be213ce623efb1c485f47a.gif

扫码打赏,你说多少就多少

6d27afabe8be213ce623efb1c485f47a.gif

6d27afabe8be213ce623efb1c485f47a.gif

打开支付宝扫一扫,即可进行扫码打赏哦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值