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 相关文章推荐
ajax缓存问题解决途径
Dec 06 PHP
Zend 输出产生XML解析错误
Mar 03 PHP
php中的strpos使用示例
Feb 27 PHP
destoon数据库表说明汇总
Jul 15 PHP
php异步多线程swoole用法实例
Nov 14 PHP
CentOS安装php v8js教程
Feb 26 PHP
php计算指定目录下文件占用空间的方法
Mar 13 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
Sep 20 PHP
利用php输出不同的心形图案
Apr 22 PHP
PHP编程求最大公约数与最小公倍数的方法示例
May 29 PHP
Laravel开启跨域请求的方法
Oct 13 PHP
基于PHP实现堆排序原理及实例详解
Jun 19 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
详解PHP显示MySQL数据的三种方法
2008/06/05 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
php读取csc文件并输出
2015/05/21 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
JScript中的undefined和&quot;undefined&quot;的区别
2007/03/08 Javascript
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
JS SetInterval 代码实现页面轮询
2017/08/11 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
python append、extend与insert的区别
2016/10/13 Python
用生成器来改写直接返回列表的函数方法
2017/05/25 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
python opencv实现运动检测
2018/07/10 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
基于python生成器封装的协程类
2019/03/20 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
Python单链表原理与实现方法详解
2020/02/22 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
python各种excel写入方式的速度对比
2020/11/10 Python
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
企业军训感想
2014/02/07 职场文书
热爱祖国演讲稿
2014/05/04 职场文书
学校督导评估方案
2014/06/10 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js