php插入排序法实现数组排序实例


Posted in PHP onFebruary 16, 2015

本文实例讲述了php插入排序法实现数组排序的方法。分享给大家供大家参考。具体分析如下:

插入排序法的基本思路:同样以案例来说明,还是以$arr = array(2,6,3,9),由大到小排序。

实现原理:假设(并不实际创建)有一个有序数组$arr = array(2),用$arr[1]=6来与它进行比较,如果6>2,由把$arr[0]后移到$arr[1]位置,而6插入到$arr[0]位置。接着,$arr[2]=3与$arr[1]=2比较,3>2,则$arr[1]=2继续后移到$arr[2]位置,原$arr[3]=3插入到$arr[1]位置,再继续把9插入到合位置,最终得到的结果是(9,6,3,2)。同样是经过 count($arr)-1 次大循环,即可实现排序。

代码规律分析:

第一次大循环:$[1]与$[0]比;
第二次大循环:$[2]与$[1]比,$[1]与$[0]比;
第三次大循环:$[3]与$[2]比,$[2]与$[1]比,$[1]与$[0]比;

PHP代码,使用了函数封装,以便于使用

<?php
function insertSort(&$arr){
 for($i=1;$i<count($arr);$i++){
 //$insertVal是准备插入的数
 for($j=$i;$j>0;$j--){
  if($arr[$j]>$arr[$j-1]){
  $insertVal = $arr[$j];
  $arr[$j] = $arr[$j-1];
  $arr[$j-1] = $insertVal;
  }
 }
 }
}
$myarr = array(2,6,3,9);
insertSort($myarr);
echo "<pre>";
print_r($myarr);
?>

代码实现分析:

第一次大循环:

$i=1 数组(2,6,3,9)
$j=1 执行6和2比:$arr[1]=2;$arr[0]=6,得到(6,2,3,9)

第二次大循环:

$i=2 数组(6,2,3,9)
$j=2 执行3和2比:变成$arr[2]=2,$arr[1]=3,得到(6,3,2,9)
$j--,$j=1 执行$arr[1]和$arr[0]比:条件不成立

第三次大循环:

$i=3 数组(6,3,2,9)
$j=3 执行9和2比:变成$arr[3]=2,$arr[2]=9,得到(6,3,9,2)
$j--,$j=2 执行9和3比:变成$arr[2]=3,$arr[1]=9,得到(6,9,3,2)
$j--,$j=1 执行9和6比:变成$arr[1]=5,$arr[0]=9,得到(9,6,3,2)

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
php中autoload的用法总结
Nov 08 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
Jul 29 PHP
php输出指定时间以前时间格式的方法
Mar 21 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
Jul 03 PHP
php中array_unshift()修改数组key注意事项分析
May 16 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
PHP使用自定义方法实现数组合并示例
Jul 07 PHP
Laravel如何友好的修改.env配置文件详解
Jun 07 PHP
Laravel Eloquent ORM 多条件查询的例子
Oct 10 PHP
tp5修改(实现即点即改)
Oct 18 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 PHP
php实现递归与无限分类的方法
Feb 16 #PHP
php实现多维数组中每个单元值(数字)翻倍的方法
Feb 16 #PHP
php数组添加与删除单元的常用函数实例分析
Feb 16 #PHP
PHP两种快速排序算法实例
Feb 15 #PHP
PHP批量查询WordPress留言者E-mail地址实现方法
Feb 15 #PHP
CentOS下PHP安装Oracle扩展
Feb 15 #PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
Feb 14 #PHP
You might like
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
smarty模板数学运算示例
2016/12/11 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
vue 2.0封装model组件的方法
2017/08/03 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
Python 中pandas.read_excel详细介绍
2017/06/23 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
Python实现FM算法解析
2019/06/18 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
调研汇报材料范文
2014/08/17 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
整改报告格式
2014/11/06 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书