说说PHP数组的三种排序(冒泡/选择/插入)方法
PHP #数组 #排序 #冒泡 #选择 #插入2012-05-30 10:17
一、冒泡排序法
说明:找到最大的数,排列到最后面,然后继续找
例:
01 | $arr = array (3,5,-1,0,2); |
02 | for ( $i =0; $i < count ( $arr )-1; $i ++){ |
03 | for ( $j =0; $j < count ( $arr )-1- $i ; $j ++){ |
04 | if ( $arr [ $j ]> $arr [ $j +1]){ |
05 | $temp = $arr [ $j ]; |
06 | $arr [ $j ]= $arr [ $j +1]; |
07 | $arr [ $j +1]= $temp ; |
08 | } |
09 | } |
10 | } |
理解:
3,5,-1,0,2
//从第一个数开始往后比较,如果比后面的数大则与后面的数调位置
//第一次,3小于5,那么不变
//第二次,5大于-1,那么变成
3,-1,5,0,2
//第三次,5大于0
3,-1,0,5,2
//第四次,5大于2
3,-1,0,2,5
至此完成一次内循环,此时最后一个数完成排序,下次将不参与
3,-1,0,2,5
第二次外循环开始
第一次:3大于-1
-1,3,0,2,5
第二次:3大于0
-1,0,3,2,5
第三次:3大于2
-1,0,2,3,5
至此完成后面两位数的排序了,接下来类推
-1,0,2,3,5
二、选择排序法
说明:先假设第一个数就是最小的数,然后将后面的数依次与它比较,如果假设的数不是最小的数,就将它与后面的最小的数调换位置
01 | $arr = array (2,1,-1,3,0); |
02 | for ( $i =0; $i < count ( $arr )-1; $i ++){ |
03 | $minval = $arr [ $i ]; |
04 | $minindex = $i ; |
05 | for ( $j =1+ $i ; $j < count ( $arr ); $j ++){ |
06 | if ( $arr [ $j ]< $minval ){ |
07 | $minval = $arr [ $j ]; |
08 | $minindex = $j ; |
09 | } |
10 | } |
11 | $temp = $arr [ $i ]; |
12 | $arr [ $i ] = $arr [ $minindex ]; |
13 | $arr [ $minindex ] = $temp ; |
14 | } |
理解:
2,1,-1,3,0
//先假设第一个数2为最小值,它后面的数依次与2做比较,寻找到最小的那个数
过程:
1小于2,那么minval=1
-1小于1,那么minval=-1
3大于-1,不变
0大于-1,不变
那么现在就找到了该数组中最小的数了为-1
将-1与2调换位置就完成第一个数的排序了
那么现在数组变成
-1,1,2,3,0
现在第一个数-1已经为有序,所以不参与比较了,往后面继续
现在假设minval=1
2大于1,不变
3大于1,不变
0小于1,那么minval=0
现在一次循环完成,调换0与1的位置完成第二个数的排序
那么现在数组变成
-1,0,2,3,1
//后面的推法与上面相同。。。
三、插入排序法
说明:先假设一个数组中的第一个数为单独的有序数组,再将后面的一个数与它【这里随它I的增长,就变成它们了】做比较,如果后面的数比假设的数还小,则将小的那个数后移,最后将那个数移到最前面
01 | $arr = array (2,1,-1,3,0); |
02 | for ( $i =1; $i < count ( $arr ); $i ++){ |
03 | $insertval = $arr [ $i ]; |
04 | $insertindex = $i -1; |
05 | while ( $insertindex >=0 && $insertval < $arr [ $insertindex ]){ |
06 | $arr [ $insertindex +1]= $arr [ $insertindex ]; |
07 | $insertindex --; |
08 | } |
09 | $temp = $arr [ $i ]; |
10 | $arr [ $insertindex +1]= $insertval ; |
11 | } |
理解:
2,1,-1,3,0
//第一次,先保存待插入的数1为insertval,再拿 insertval 与2比较,1小于2,所以把2后移,变成如下的图
2,2,-1,3,0
//此时2前面没有数字了,insertindex=0,所以比较完成,那么将insertval插入到寻找到的这个位置。变成如下图
1,2,-1,3,0
//此时,1,2变成有序数组
//第二次,先保存待插入的数-1为insertval,再拿insertval与2做比较,-1小于2,所以把2后移,变成如下图
1,2,2,3,0
//此时,再拿insertval与1做比较,-1小于1,那么把-1后移,变成如下图(这就是一个拿待插入数与前面的有序数组比较的过程)
1,1,2,3,0
//此时,insertindex到头了,所以将insertval插入该位置
-1,1,2,3,0
//后面推法如上
相关文章
- php的文件操作代码 2012/05/30
- Discuzx2开发标准流程 2012/05/30
- php的临时文件目录 2012/05/30
- php实现DOS攻击的代码 2012/05/30
- 说说require(),include(),require_once()和include_once()的区别 2012/05/29
- php去掉字符串的最后一个字符 2012/05/29
- php过滤xss函数 2012/05/28
- php破解图片验证码 2012/05/26
- PHP公历转农历(阳历转阴历)的类 2012/05/26
- PHP伪静态函数 2012/05/25