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一些常用的正则表达式字符的一些转换
Jul 29 PHP
php 获取一个月第一天与最后一天的代码
May 16 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
Oct 29 PHP
解析htaccess伪静态的规则
Jun 18 PHP
codeigniter框架批量插入数据
Jan 09 PHP
php生成excel文件的简单方法
Feb 08 PHP
php如何实现只替换一次或N次
Oct 29 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
Mar 21 PHP
功能强大的php分页函数
Jul 20 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
php通过header发送自定义数据方法
Jan 18 PHP
laravel使用数据库测试注意事项
Apr 10 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
destoon二次开发常用数据库操作
2014/06/21 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
php将html转为图片的实现方法
2017/05/19 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
JS自动缩小超出大小的图片
2012/10/12 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
解决js ajax同步请求造成浏览器假死的问题
2018/01/18 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
vue 之 css module的使用方法
2018/12/04 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
Python实现自动上京东抢手机
2018/02/06 Python
python实现堆和索引堆的代码示例
2018/03/19 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
django rest framework 自定义返回方式
2020/07/12 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
详解HTML5表单新增属性
2016/12/21 HTML / CSS
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
创业计划书六个要素
2013/12/26 职场文书
法人授权委托书
2014/04/03 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
python 破解加密zip文件的密码
2021/04/22 Python