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实现像JSP,ASP里Application那样的全局变量
Jan 12 PHP
整理的9个实用的PHP库简介和下载
Nov 09 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
php调整gif动画图片尺寸示例代码分享
Dec 05 PHP
ThinkPHP让分页保持搜索状态的方法
Jul 02 PHP
PHP使用glob函数遍历目录或文件夹的方法
Dec 16 PHP
jquery获取多个checkbox的值异步提交给php的方法
Jun 24 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
Aug 18 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 PHP
PHP join()函数用法与实例讲解
Mar 11 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
Laravel5.1 框架表单验证操作实例详解
Jan 07 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
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
Javascript的闭包
2009/12/31 Javascript
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
javascript 验证日期的函数
2010/03/18 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
js里面的变量范围分享
2020/07/18 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
Python3.8中使用f-strings调试
2019/05/22 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
python实现拼图小游戏
2020/02/22 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
农业大学毕业生的个人自我评价
2013/10/11 职场文书
早读迟到检讨书
2014/01/24 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
react antd实现动态增减表单
2021/06/03 Javascript
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers