PHP中数组的三种排序方法分享
更新时间:2012年05月07日 21:42:28 作者:
PHP中数组的三种排序方法,主要包括冒泡排序法、选择排序法、插入排序法,需要的朋友可以参考下
一、冒泡排序法
说明:找到最大的数,排列到最后面,然后继续找
例:
$arr = array(3,5,-1,0,2);
for($i=0;$i<count($arr)-1;$i++){
for($j=0;$j<count($arr)-1-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$temp = $arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}
}
理解:
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
二、选择排序法
说明:先假设第一个数就是最小的数,然后将后面的数依次与它比较,如果假设的数不是最小的数,就将它与后面的最小的数调换位置
$arr=array(2,1,-1,3,0);
for($i=0;$i<count($arr)-1;$i++){
$minval = $arr[$i];
$minindex = $i;
for($j=1+$i;$j<count($arr);$j++){
if($arr[$j]<$minval){
$minval = $arr[$j];
$minindex = $j;
}
}
$temp = $arr[$i];
$arr[$i] = $arr[$minindex];
$arr[$minindex] = $temp;
}
理解:
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的增长,就变成它们了】做比较,如果后面的数比假设的数还小,则将小的那个数后移,最后将那个数移到最前面
$arr=array(2,1,-1,3,0);
for($i=1;$i<count($arr);$i++){
$insertval=$arr[$i];
$insertindex = $i-1;
while($insertindex>=0 && $insertval<$arr[$insertindex]){
$arr[$insertindex+1]=$arr[$insertindex];
$insertindex--;
}
$temp = $arr[$i];
$arr[$insertindex+1]=$insertval;
}
理解:
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
//后面推法如上
说明:找到最大的数,排列到最后面,然后继续找
例:
复制代码 代码如下:
$arr = array(3,5,-1,0,2);
for($i=0;$i<count($arr)-1;$i++){
for($j=0;$j<count($arr)-1-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$temp = $arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}
}
理解:
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
二、选择排序法
说明:先假设第一个数就是最小的数,然后将后面的数依次与它比较,如果假设的数不是最小的数,就将它与后面的最小的数调换位置
复制代码 代码如下:
$arr=array(2,1,-1,3,0);
for($i=0;$i<count($arr)-1;$i++){
$minval = $arr[$i];
$minindex = $i;
for($j=1+$i;$j<count($arr);$j++){
if($arr[$j]<$minval){
$minval = $arr[$j];
$minindex = $j;
}
}
$temp = $arr[$i];
$arr[$i] = $arr[$minindex];
$arr[$minindex] = $temp;
}
理解:
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的增长,就变成它们了】做比较,如果后面的数比假设的数还小,则将小的那个数后移,最后将那个数移到最前面
复制代码 代码如下:
$arr=array(2,1,-1,3,0);
for($i=1;$i<count($arr);$i++){
$insertval=$arr[$i];
$insertindex = $i-1;
while($insertindex>=0 && $insertval<$arr[$insertindex]){
$arr[$insertindex+1]=$arr[$insertindex];
$insertindex--;
}
$temp = $arr[$i];
$arr[$insertindex+1]=$insertval;
}
理解:
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二维数组排序的3种方法和自定义函数分享
- php对数组排序代码分享
- 一个PHP二维数组排序的函数分享
- php二维数组排序方法(array_multisort usort)
- php对数组排序的简单实例
- php对二维数组进行排序的简单实例
- php对二维数组按指定键值key排序示例代码
- php二维数组排序详解
- PHP数组排序函数合集 以及它们之间的联系分析
- PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
- 解析PHP中数组元素升序、降序以及重新排序的函数
- php二维数组排序与默认自然排序的方法介绍
- php比较多维数组中值的大小排序实现代码
- php中的一些数组排序方法分享
- php 数组动态添加实现代码(最土团购系统的价格排序)
- PHP 多维数组的排序问题 根据二维数组中某个项排序
- php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
- 不使用php api函数实现数组的交换排序示例
相关文章
关于shopex同步ucenter的redirect问题,导致script不运行
本文小编为大家介绍,关于shopex同步ucenter的redirect问题,导致script不运行。有需要的朋友可以参考一下2013-04-04php使用gettimeofday函数返回当前时间并存放在关联数组里
这篇文章主要介绍了php使用gettimeofday函数返回当前时间并存放在关联数组里的方法,涉及php中gettimeofday函数的使用技巧,需要的朋友可以参考下2015-03-03php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
php 中处理浮点数时经常要需要四舍五入。在php 中有两个函数适用于这种情况:floor函数、ceil函数和round函数2014-07-07
最新评论