PHP中涉及到多种排序,而冒泡排序应该是我用的最闹心的一种排序,弄了老半天还是没太懂,这篇简单讲述PHP冒泡排序的很适合像我一样不太懂冒泡排序的东西看哦!
1.冒泡算法
看了几篇关于冒泡的文章,但是总是对于每次循环的边界值思路讲的比较笼统。
不是很容易被新手记住,我自己平时也是硬记下来的。
但是对于算法,硬记,时间长了还是容易忘记,所以自己写了一次,把每次思路尽量写下来,便于理解,理解了容易加深映像,不容易忘记了。
冒泡算法,核心就是
1.循环比对 每次比对相邻2个数组的大小,然后把最大的数组放到后面,这样所有比对循环一次,就会把数组中最大的数放到数组最后
2. 然后重复循环(重复上面的比对循环):此时循环的时候 最后一个值是不需要参加循环了,因为已经确定是最大的那个了。也就是说,重复循环,比对数组越来越少。最终只剩一个数组元素了。循环结束
代码层看:
$arr=array(5,4,3,6,7,1,2,10,8,9);
先从两两比对开始看
if($arr[$i]>$arr[$i+1]){//相邻比较 这个应该比较容易理解吧
$tem=$arr[$i];
$arr[$i]=$arr[$i+1];
$arr[$i+1]=$tem;
}以上代码就是比对2个数组相邻的值大小,大的放后面。可以看出来 $i 最大就是数组索引前一位的,否则 $arr[$i+1]不存在了,无法比较。也就是说 $i<count($ar)-1;$i初始值为0
先从内层比对循环开始看
一般for循环 这么写
for($i=0;$i<$xx;$i++){
if($arr[$i]>$arr[$i+1]){//相邻比较 这个应该比较容易理解吧
$tem=$arr[$i];
$arr[$i]=$arr[$i+1];
$arr[$i+1]=$tem;
}
} 上面思路说了,每次比对循环都是从开头第一个元素开始 所以$i 起始值为0, 重复循环一次,下次循环就少比对一个元素。这里$xx要越来越小; 那这个$xx怎么确定呢?
$xx第一次循环值是多少 ?上面两两比对得出结论 count($ar)-1
$xx 最后一次值该是多少呢?上面两两比对得出结论 是1。
也就是说 $xx 为 count($arr)-$k $k是累加的 比对循环可改为(重复循环每循环一次)
for($i=0;$i<count($arr)-$k;$i++){
if($arr[$i]>$arr[$i+1]){//相邻比较
$tem=$arr[$i];
$arr[$i]=$arr[$i+1];
$arr[$i+1]=$tem;
}
} 再看这个$k 想想这个$k不就是随着重复循环在累增的吗? 把重复循环代码加上如下
我们再来看下$k是怎么确定边界值的 上面说了, $xx 边界值是 count($arr)-1 到 1 已经定义 那么数学算法 $k边界值也就出来了 为 1到 count($arr)-1
写入到循环里也就是 $k=1;$k 整理下就是 希望大家可以看的懂,还是多练练比较好,有的时候我们不明白的知识,自己多写两遍写着写着就懂了! Atas ialah kandungan terperinci 简单的理解PHP冒泡排序. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!for($k=1;$k<count($arr);$k++){
for($i=0;$i<count($arr)-$k;$i++){
if($arr[$i]>$[$i+1]){
$temparr= $arr[$i];
$arr[$i] =$arr[$i+1];
$arr[$i+1] = $temparr;
}
}
}
Bagaimana untuk membuka fail php
Apakah kaedah pengisihan?
Bagaimana untuk mengalih keluar beberapa elemen pertama tatasusunan dalam php
Apa yang perlu dilakukan jika penyahserialisasian php gagal
Bagaimana untuk menyambungkan php ke pangkalan data mssql
Bagaimana untuk menyambung php ke pangkalan data mssql
Bagaimana untuk memuat naik html
Bagaimana untuk menyelesaikan aksara bercelaru dalam PHP