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 相关文章推荐
php实现ping
Oct 09 PHP
MYSQL环境变量设置方法
Jan 15 PHP
深入解析php之sphinx
May 15 PHP
php-cli简介(不会Shell语言一样用Shell)
Jun 03 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
Apr 07 PHP
Laravel 5框架学习之路由、控制器和视图简介
Apr 07 PHP
php实现随机显示图片方法汇总
May 21 PHP
功能强大的PHP发邮件类
Aug 29 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
php利用嵌套数组拼接与解析json的方法
Feb 07 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
详解json在php中的应用
Sep 30 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中10个不常见却非常有用的函数
2010/03/21 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
使用php显示搜索引擎来的关键词
2014/02/13 PHP
PHP 快速排序算法详解
2014/11/10 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
FLASH 广告之外的链接
2008/12/16 Javascript
brook javascript框架介绍
2011/10/10 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
2013/08/05 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
Python读写zip压缩文件的方法
2018/08/29 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
init进程的作用
2015/08/20 面试题
遇到的Mysql的面试题
2014/06/29 面试题
安全保证书范文
2014/04/29 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
大学生村官入党自传
2015/06/26 职场文书
python 调用js的四种方式
2021/04/11 Python
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏