摘要:
编程语言千千万,都离不开各种排序,比如比较典型的冒泡排序、快速排序、插入排序等,当然还有为之所动容的猴子排序、睡眠排序!!!本文只讲如何使用PHP实现选择排序的算法!
原理分析
本次使用的选择排序数组数据如下:$arr1 = array(18, 22, 12,15,23,9);
选择排序大致过程:
遍历一个数组,在此过程中,找出数组中的最大值及其位置。然后将该最大值的单元,跟数组的最后一个单元“交换位置”,这样进行一趟,数组中的最大值就一定放在最后位置了。
将上述过程中剩余的数据继续遍历一次,并做同样的事情,则此时剩余部分的最大值也能够放在剩余部分的最后位置——对整体而言就是倒数第二的位置。
依此类推。。。。。。。进行若干次,就排好了。
下方图中所示为上面所列举的算法过程:
规律总结
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);
感谢您的支持,我会继续努力的!
扫码打赏,你说多少就多少
打开支付宝扫一扫,即可进行扫码打赏哦