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 相关文章推荐
echo, print, printf 和 sprintf 区别
Dec 06 PHP
特详细的PHPMYADMIN简明安装教程
Aug 01 PHP
删除数组元素实用的PHP数组函数
Aug 18 PHP
php 批量添加多行文本框textarea一行一个
Jun 03 PHP
PHP MySql增删改查的简单实例
Jun 21 PHP
PHP中set_include_path()函数相关用法分析
Jul 18 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
thinkphp5实现无限级分类
Feb 18 PHP
PHP7 list() 函数修改
Mar 09 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
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
PHP获取数组最大值下标的方法
2015/05/12 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
JS 实现导航栏悬停效果
2013/09/23 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
python实现指定字符串补全空格的方法
2015/04/30 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
django-csrf使用和禁用方式
2020/03/13 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
Python代码注释规范代码实例解析
2020/08/14 Python
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
毕业自我评价范文
2013/11/17 职场文书
护理不良事件检讨书
2014/02/06 职场文书
高一新生军训方案
2014/05/12 职场文书
学习十八大演讲稿
2014/09/15 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
商务英语求职信范文
2015/03/19 职场文书
五一放假通知怎么写
2015/08/18 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android