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 相关文章推荐
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
php与paypal整合方法
Nov 28 PHP
php调用c接口无错版介绍
Mar 11 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
php实现有趣的人品测试程序实例
Jun 08 PHP
PHP中的命名空间详细介绍
Jul 02 PHP
PHP微信开发之有道翻译
Jun 23 PHP
php生成与读取excel文件
Oct 14 PHP
利用laravel+ajax实现文件上传功能方法示例
Aug 13 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 PHP
Yii2.0实现的批量更新及批量插入功能示例
Jan 29 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 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
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
基于JQuery的6个Tab选项卡插件
2010/09/03 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
JS小游戏之宇宙战机源码详解
2014/09/25 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
python读取各种文件数据方法解析
2018/12/29 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
机械电子工程专业推荐信范文
2013/11/20 职场文书
五一口号
2014/06/19 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
学习三严三实心得体会
2014/10/13 职场文书
出纳工作检讨书
2014/10/18 职场文书
2015年植树节活动总结
2015/02/06 职场文书
个人借条范本
2015/05/25 职场文书
小学庆六一主持词
2015/06/30 职场文书
使用pytorch实现线性回归
2021/04/11 Python
配置nginx负载均衡
2022/05/06 Servers
Linux安装Docker详细教程
2022/07/07 Servers
python pandas 解析(读取、写入)CSV 文件的操作方法
2022/12/24 Python