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 相关文章推荐
利用PHP制作简单的内容采集器的代码
Nov 28 PHP
PHPCMS的使用小结
Sep 20 PHP
有关PHP中MVC的开发经验分享
May 17 PHP
php中检查文件或目录是否存在的代码小结
Oct 22 PHP
PHP学习笔记 IIS7下安装配置php环境
Oct 29 PHP
php中autoload的用法总结
Nov 08 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
Jun 23 PHP
PHP开发框架kohana3 自定义路由设置示例
Jul 14 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
Nov 25 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 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
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
javascript编程起步(第一课)
2007/01/10 Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
JS的反射问题
2010/04/07 Javascript
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
vue项目前端埋点的实现
2019/03/06 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
web.py获取上传文件名的正确方法
2014/08/26 Python
Python实现配置文件备份的方法
2015/07/30 Python
python根据京东商品url获取产品价格
2015/08/09 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
Python3 批量扫描端口的例子
2019/07/25 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
计算机网络专业个人的自我评价
2013/10/17 职场文书
答谢会策划方案
2014/05/12 职场文书
人才市场接收函
2015/01/30 职场文书
个人党性锻炼总结
2015/03/05 职场文书
2015年营业员工作总结
2015/04/23 职场文书
致运动员的广播稿
2015/08/19 职场文书
2016年班主任培训心得体会
2016/01/07 职场文书
Golang 遍历二叉树
2022/04/19 Golang