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(8) php 数组
Mar 05 PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
关于UEditor编辑器远程图片上传失败的解决办法
Aug 31 PHP
简单的cookie计数器实现源码
Jun 07 PHP
解析php中的fopen()函数用打开文件模式说明
Jun 20 PHP
用PHP代码在网页上生成图片
Jul 01 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
PHP长网址与短网址的实现方法
Oct 13 PHP
php使用fullcalendar日历插件详解
Mar 06 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
Jul 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
php 前一天或后一天的日期
2008/06/28 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
javascript事件问题
2009/09/05 Javascript
基于node.js的快速开发透明代理
2010/12/25 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
jquery $.each() 使用小探
2013/08/23 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
Python通过select实现异步IO的方法
2015/06/04 Python
Django的数据模型访问多对多键值的方法
2015/07/21 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
波兰在线运动商店:YesSport
2020/07/23 全球购物
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
Linux的文件类型
2012/03/07 面试题
法务专员岗位职责
2014/01/02 职场文书
品牌服务方案
2014/06/03 职场文书
保护动物的标语
2014/06/11 职场文书
给老婆道歉的话
2015/01/20 职场文书
怎样写离婚协议书
2015/01/26 职场文书
加薪通知
2015/04/25 职场文书
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android