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+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
php模板中出现空行解决方法
Mar 08 PHP
php 判断数组是几维数组
Mar 20 PHP
解析PHP缓存函数的使用说明
May 10 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
PHP Curl出现403错误的解决办法
May 29 PHP
PHP中使用break跳出多重循环代码实例
Jan 21 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
Oct 16 PHP
php冒泡排序与快速排序实例详解
Dec 07 PHP
php静态成员方法和静态的成员属性的使用方法
Oct 26 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Mar 09 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+java实现自动新闻滚动窗口
2006/10/09 PHP
php 中的str_replace 函数总结
2007/04/27 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
jquery仿微信聊天界面
2017/05/06 jQuery
详解Vue中过度动画效果应用
2017/05/25 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
js实现每日签到功能
2018/11/29 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
Python利用operator模块实现对象的多级排序详解
2017/05/09 Python
Python元组知识点总结
2019/02/18 Python
Python中print和return的作用及区别解析
2019/05/05 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
详解HTML5中rel属性的prefetch预加载功能使用
2016/05/06 HTML / CSS
房地产员工找工作的自我评价
2013/11/15 职场文书
信访工作者先进事迹
2014/01/17 职场文书
单位成立周年感言
2014/01/26 职场文书
旷课检讨书3000字
2014/02/04 职场文书
国庆节标语大全
2014/10/08 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书
Node与Python 双向通信的实现代码
2021/07/16 Javascript
使用CSS3实现按钮悬停闪烁动态特效代码
2021/08/30 HTML / CSS
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript