当前位置:Gxlcms > PHP教程 > PHP中数组的三种排序方法分享_php技巧

PHP中数组的三种排序方法分享_php技巧

时间:2021-07-01 10:21:17 帮助过:26人阅读

一、冒泡排序法
说明:找到最大的数,排列到最后面,然后继续找

例:
代码如下:
  1. <br>$arr = array(3,5,-1,0,2); <br>for($i=0;$i<count($arr)-1;$i++){ <br="">for($j=0;$j<count($arr)-1-$i;$j++){ <br="">if($arr[$j]>$arr[$j+1]){ <br>$temp = $arr[$j]; <br>$arr[$j]=$arr[$j+1]; <br>$arr[$j+1]=$temp; <br>} <br>} <br>} <br> <br>理解: <br>3,5,-1,0,2 <br>//从第一个数开始往后比较,如果比后面的数大则与后面的数调位置 <br>//第一次,3小于5,那么不变 <br>//第二次,5大于-1,那么变成 <br>3,-1,5,0,2 <br>//第三次,5大于0 <br>3,-1,0,5,2 <br>//第四次,5大于2 <br>3,-1,0,2,5 <br>至此完成一次内循环,此时最后一个数完成排序,下次将不参与 <br>3,-1,0,2,5第二次外循环开始 第一次:3大于-1 <br>-1,3,0,2,5 <br>第二次:3大于0 <br>-1,0,3,2,5 <br>第三次:3大于2 <br>-1,0,2,3,5 <br>至此完成后面两位数的排序了,接下来类推 <br>-1,0,2,3,5 <br><strong>二、选择排序法</strong> <br>说明:先假设第一个数就是最小的数,然后将后面的数依次与它比较,如果假设的数不是最小的数,就将它与后面的最小的数调换位置 <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>$arr=array(2,1,-1,3,0); <br>for($i=0;$i<count($arr)-1;$i++){ <br="">$minval = $arr[$i]; <br>$minindex = $i; <br>for($j=1+$i;$j<count($arr);$j++){ <br="">if($arr[$j]<$minval){ <br>$minval = $arr[$j]; <br>$minindex = $j; <br>} <br>} <br>$temp = $arr[$i]; <br>$arr[$i] = $arr[$minindex]; <br>$arr[$minindex] = $temp; <br>} <br> <br>理解: <br>2,1,-1,3,0 <br>//先假设第一个数2为最小值,它后面的数依次与2做比较,寻找到最小的那个数 <br>过程: <br>1小于2,那么minval=1 <br>-1小于1,那么minval=-1 <br>3大于-1,不变 <br>0大于-1,不变 <br>那么现在就找到了该数组中最小的数了为-1 <br>将-1与2调换位置就完成第一个数的排序了 <br>那么现在数组变成 <br>-1,1,2,3,0 <br>现在第一个数-1已经为有序,所以不参与比较了,往后面继续 <br>现在假设minval=1 <br>2大于1,不变 <br>3大于1,不变 <br>0小于1,那么minval=0 <br>现在一次循环完成,调换0与1的位置完成第二个数的排序 <br>那么现在数组变成 <br>-1,0,2,3,1 <br>//后面的推法与上面相同。。。 <br><br><strong>三、插入排序法<br><br></strong>说明:先假设一个数组中的第一个数为单独的有序数组,再将后面的一个数与它【这里随它I的增长,就变成它们了】做比较,如果后面的数比假设的数还小,则将小的那个数后移,最后将那个数移到最前面 <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>$arr=array(2,1,-1,3,0); <br>for($i=1;$i<count($arr);$i++){ <br="">$insertval=$arr[$i]; <br>$insertindex = $i-1; <br>while($insertindex>=0 && $insertval<$arr[$insertindex]){ <br>$arr[$insertindex+1]=$arr[$insertindex]; <br>$insertindex--; <br>} <br>$temp = $arr[$i]; <br>$arr[$insertindex+1]=$insertval; <br>} <br> <br>理解: <br>2,1,-1,3,0 <br>//第一次,先保存待插入的数1为insertval,再拿 insertval 与2比较,1小于2,所以把2后移,变成如下的图 <br>2,2,-1,3,0 <br>//此时2前面没有数字了,insertindex=0,所以比较完成,那么将insertval插入到寻找到的这个位置。变成如下图 <br>1,2,-1,3,0 <br>//此时,1,2变成有序数组 <br>//第二次,先保存待插入的数-1为insertval,再拿insertval与2做比较,-1小于2,所以把2后移,变成如下图 <br>1,2,2,3,0 <br>//此时,再拿insertval与1做比较,-1小于1,那么把-1后移,变成如下图(这就是一个拿待插入数与前面的有序数组比较的过程) <br>1,1,2,3,0 <br>//此时,insertindex到头了,所以将insertval插入该位置 <br>-1,1,2,3,0 <br>//后面推法如上 </count($arr);$i++){></li></ol></pre></count($arr);$j++){></count($arr)-1;$i++){></li></ol></pre></count($arr)-1-$i;$j++){></count($arr)-1;$i++){>

人气教程排行