PHP排序算法的复习和总结


Posted in PHP onFebruary 15, 2012

直接上代码吧!

<?php 
/* 
* 插入排序(一维数组) 
* 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当的位置,使数列依然有序;直到待排序的数据元素全部插入完成为止。 
*/ 
function insertSort($arr){ 
if(!is_array($arr) || count($arr)==0){ 
return $arr; 
} 
$count = count($arr); 
for($i=1; $i<$count; $i++){ 
if(isset($arr[$i])){ 
 $tmp = $arr[$i]; //获取后一个元素的值 

 $j = $i - 1; //获取前面的下标 

 while($arr[$j] > $tmp){ //如果前面一个比后面一个大, 这里是从小到大 

  $arr[$j+1] = $arr[$j]; //把小的元素和前面的对换,直到移动到合适的位置,在移动下一个 

  $arr[$j] = $tmp; 

  $j--; 

 } 
} 
} 
return $arr; 
} 

 
/* 
* 选择排序(一维数组) 
* 每一趟从待排序的数据元素中选出最小(最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 
*/ 
function selectSort($arr){ 
if(!is_array($arr) || count($arr) == 0) 
{ 
return $arr; 
} 
$count = count($arr); 
for($i=0; $i<$count; $i++){ 
$k = $i; 
for($j=$i+1; $j<$count; $j++){ 

if ($arr[$k] > $arr[$j]) 


$k = $j; //找出最小的 

 if ($k != $i){ 


 $tmp = $arr[$i]; 


 $arr[$i] = $arr[$k]; 


 $arr[$k] = $tmp; 

 } 
} 
} 
return $arr; 
} 
/*
 
* 冒泡排序(一维数组) 
* 两两比较待排序数据元素的大小,发现两个数据元素的次序相反即进行交换,直到没有反序的数据元素为止 
*/ 
function bubbleSort($array){ 
$count = count($array); 
if ($count <= 0) { 
return false; 
} 
for($i=0; $i<$count; $i++){ 
for($j=$count-1; $j>$i; $j--){ 

 if ($array[$j] < $array[$j-1]){ //比较找到的数进行交换 


$tmp = $array[$j]; 


$array[$j] = $array[$j-1]; 


$array[$j-1] = $tmp; 

 } 
} 
} 
return $array; 
} 

 
/* 
* 快速排序(一维数组) 
* 
*/ 
function quickSort($array){ 
if (count($array) <= 1){ 
return $array; 
} 
$key = $array[0]; 
$left_arr = array(); 
$right_arr = array(); 
for ($i=1; $i<count($array); $i++){ 

if ($array[$i] <= $key){ 

 $left_arr[] = $array[$i]; 

}else{ 
 $right_arr[] = $array[$i]; 
} 
} 
$left_arr = quickSort($left_arr); 
$right_arr = quickSort($right_arr); 
return array_merge($left_arr, array($key), $right_arr); 
} 
/** 
* 按照元素的值进行排序 
* strOrder 为排列的顺序 asc 升序 desc 降序 
*/ 
function sortByVal($arr,$strOrder='asc') 
{ 
if(!is_array($arr) || count($arr)==0) 
{ 
return $arr; 
} 
$arrReturn = array(); 
foreach($arr as $key=>$val) 
{ 
$arrKey[] = $key; 
$arrVal[] = $val; 
} 
$count = count($arrVal); 
if($count) 
{ 
//创建key的顺序数组 
for($key=0;$key<$count;$key++) 
{ 
$arrKeyMap[$key] = $key; 
} 
//对值进行排序 
for($i=0;$i<$count;$i++) 
{ 
for($j = $count-1; $j>$i;$j--) 
{ 
//<从小到大排列 升降在这修改 
$bol = $strOrder == 'asc' ? $arrVal[$j]<$arrVal[$j-1] : $arrVal[$j]>$arrVal[$j-1]; 
if($bol){ 
$tmp = $arrVal[$j]; 
$arrVal[$j] = $arrVal[$j-1]; 
$arrVal[$j-1] = $tmp; 
//值的冒泡排序,引起key的数组的交互 
$keytmp = $arrKeyMap[$j]; 
$arrKeyMap[$j] = $arrKeyMap[$j-1]; 
$arrKeyMap[$j-1] = $keytmp; 
} 
} 
} 
if(count($arrKeyMap)) 
{ 
foreach ($arrKeyMap as $val) 
{ 
$arrReturn[] = $arrKey[$val]; 
} 
} 
return $arrReturn; 
} 
} 
/** 
* 使用原生的函数进行数组按照值进行排列 
*/ 
function arraySortByVal($arr,$keys,$type='asc'){ 
$keysvalue = $new_array = array(); 
foreach ($arr as $k=>$v){ 
$keysvalue[$k] = $v[$keys]; 
} 
if($type == 'asc'){ 
asort($keysvalue); 
}else{ 
arsort($keysvalue); 
} 
reset($keysvalue); 
foreach ($keysvalue as $k=>$v){ 
$new_array[$k] = $arr[$k]; 
} 
return $new_array; 
}

对于下面的2个对于array的值进行排序的方法一个是自己实现的一个是使用了原生的PHP函数的,其实排序对于少量数据一般就单页的数据量的数据还是可以的,如果涉及到大量的数据的排序,建议可以整合到MYSQL的基础类中来进行。
PHP 相关文章推荐
PHP学习之PHP变量
Oct 09 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
利用php实现禁用IE和火狐的缓存问题
Dec 03 PHP
解析PHP中$_FILES的使用以及注意事项
Jul 05 PHP
PHP curl实现抓取302跳转后页面的示例
Jul 04 PHP
Yii查询生成器(Query Builder)用法实例教程
Sep 04 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
Jan 07 PHP
php四种定界符详解
Feb 16 PHP
ThinkPHP中create()方法自动验证表单信息
Apr 28 PHP
PHP利用Mysql锁解决高并发的方法
Sep 04 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
May 13 PHP
php png失真的原因及解决办法
Oct 24 PHP
php网上商城购物车设计代码分享
Feb 15 #PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 #PHP
php _autoload自动加载类与机制分析
Feb 10 #PHP
php 文本文件的读取效率
Feb 10 #PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 #PHP
PHP中集成PayPal标准支付的实现方法分享
Feb 06 #PHP
PHP中call_user_func_array()函数的用法演示
Feb 05 #PHP
You might like
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
php数组编码转换示例详解
2014/03/11 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
2014/06/30 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
python处理excel绘制雷达图
2019/10/18 Python
pandas DataFrame运算的实现
2020/06/14 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
英语系本科生个人求职信
2013/09/21 职场文书
《社戏》教学反思
2014/04/15 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
民间借贷协议书范本
2014/10/01 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
2015年清明节活动总结
2015/02/09 职场文书
通知函的格式
2015/04/27 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL