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


Posted in PHP onMay 07, 2012

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

例:

$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 相关文章推荐
1.PHP简介
Oct 09 PHP
php入门小知识
Mar 24 PHP
php获取mysql版本的几种方法小结
Mar 25 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
Aug 02 PHP
解析左右值无限分类的实现算法
Jun 20 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
Jul 22 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
PHP多线程之内部多线程实例分析
Mar 09 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
Aug 11 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
May 23 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
May 07 #PHP
php错误、异常处理机制(补充)
May 07 #PHP
PHP中的错误处理、异常处理机制分析
May 07 #PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
May 07 #PHP
PHP file_exists问题杂谈
May 07 #PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
May 06 #PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
May 05 #PHP
You might like
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
浅谈php冒泡排序
2014/12/30 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
JQuery toggle使用分析
2009/11/16 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
JSON取值前判断
2014/12/23 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
Python中if __name__ == &quot;__main__&quot;详细解释
2014/10/21 Python
Python线程详解
2015/06/24 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
pygame实现俄罗斯方块游戏(AI篇2)
2019/10/29 Python
python unichr函数知识点总结
2020/12/16 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
网站美工岗位职责
2014/04/02 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
节能减排倡议书
2014/04/15 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
普通党员个人整改措施
2014/10/27 职场文书
刘公岛导游词
2015/02/05 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书