使用PHP完成选择排序算法

原创 阁主  2020-06-21 13:41:16  阅读 3296 次 评论 0 条
摘要:

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

原理分析

本次使用的选择排序数组数据如下:

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

选择排序大致过程:

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

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

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

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

选择排序图例.png

规律总结

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 < $n - 1; $i++) {
    //a)找最大值(及下标):(趟数越大,次数越少)
    //这个循环是在其中某一趟中从前(若干)个数据中去找最大值
    $max = $arr1[0];  //取出这些数据中的第一项,假设作为最大值
    $max_key = 0;  //数据对应的下标
    //内层循环,控制比较次数
    for ($k = 0; $k < ($n - 1) - $i; $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 "<br>交换后: " . implode('-', $arr1);

交换前后.png

本文地址:https://www.mainblog.cn/237.html
版权声明:本文为原创文章,版权归 阁主 所有,欢迎分享本文,转载请保留出处!
免责申明:有些内容源于网络,没能联系到作者。如侵犯到你的权益请告知,我们会尽快删除相关内容。

评论已关闭!