原理分析
本次使用的选择排序数组数据如下:
$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 < $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);
本文地址:https://www.mainblog.cn/237.html
版权声明:本文为原创文章,版权归 阁主 所有,欢迎分享本文,转载请保留出处!
免责申明:有些内容源于网络,没能联系到作者。如侵犯到你的权益请告知,我们会尽快删除相关内容。
版权声明:本文为原创文章,版权归 阁主 所有,欢迎分享本文,转载请保留出处!
免责申明:有些内容源于网络,没能联系到作者。如侵犯到你的权益请告知,我们会尽快删除相关内容。