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笔记 字符串处理
Oct 19 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
php定时计划任务的实现方法详解
Jun 06 PHP
PHP多线程之内部多线程实例分析
Mar 09 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
PHP5.2中PDO的简单使用方法
Mar 25 PHP
php使用文本统计访问量的方法
May 12 PHP
PHP页面间传递值和保持值的方法
Aug 24 PHP
PHP入门教程之操作符与控制结构流程详解
Sep 09 PHP
Yii2单元测试用法示例
Nov 12 PHP
php 常用的系统函数
Feb 07 PHP
php图片合成方法(多张图片合成一张)
Nov 25 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 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
浅析PHP页面局部刷新功能的实现小结
2013/06/21 PHP
php 邮件发送问题解决
2014/03/22 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
php压缩文件夹最新版
2018/07/18 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
javascript设计模式 接口介绍
2012/07/24 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
Python排序搜索基本算法之选择排序实例分析
2017/12/09 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
python 文件转成16进制数组的实例
2018/07/09 Python
python批量修改图片大小的方法
2018/07/24 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
简单了解Django项目应用创建过程
2020/07/06 Python
半年思想汇报
2013/12/30 职场文书
致跳远运动员广播稿
2014/02/11 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
干部作风建设心得体会
2014/10/22 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
高一数学教学反思
2016/02/18 职场文书
建立共青团委员会的请示
2019/04/02 职场文书
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技