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生成html分页列表的代码
Mar 18 PHP
php set_time_limit(0) 设置程序执行时间的函数
May 26 PHP
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
php使用百度天气接口示例
Apr 22 PHP
php利用curl抓取新浪微博内容示例
Apr 27 PHP
一个简单的PHP验证码实现代码
May 10 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
两款万能的php分页类
Nov 12 PHP
PHP请求Socket接口测试实例
Aug 12 PHP
PHP Header失效的原因分析及解决方法
Nov 16 PHP
基于PHP-FPM进程池探秘
Oct 17 PHP
PHP curl批处理及多请求并发实现方法分析
Aug 15 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项目应该注意的几点事项分享
2013/12/20 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
php验证码生成器
2017/05/24 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
py2exe 编译ico图标的代码
2013/03/08 Python
python网络编程之读取网站根目录实例
2014/09/30 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
Atom的python插件和常用插件说明
2018/07/08 Python
django 实现电子支付功能的示例代码
2018/07/25 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
找工作最新求职信
2013/12/22 职场文书
法院信息化建设方案
2014/05/21 职场文书
功夫熊猫观后感
2015/06/10 职场文书
聊聊SpringBoot自动装配的魔力
2021/11/17 Java/Android
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript