PHP版本常用的排序算法汇总


Posted in PHP onDecember 20, 2015

//1、冒泡排序

function bubble_sort($arr){
$n = count($arr);
for($i=0;$i<$n-1;$i++){
for($j=$i+1;;$j<$n-$i;$j++){
if($arr[$j]<$arr[$i]){
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
}
}

 //2、归并排序

//merge函数将指定的两个有序数组(arr1arr2,)合并并且排序
//我们可以找到第三个数组,然后依次从两个数组的开始取数据哪个数据小就先取哪个的,然后删除掉刚刚取过///的数据
function al_merge($arrA, $arrB)
{
$arrC = array();
while (count($arrA) && count($arrB)) {
//这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值,
//不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用
$arrC[] = $arrA['0'] < $arrB['0'] ? array_shift($arrA) : array_shift($arrB);
}
return array_merge($arrC, $arrA, $arrB);
}

//归并排序主程序
function al_merge_sort($arr)
{
$len = count($arr);
if ($len <= 1) {
return $arr; //递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组
}
$mid = intval($len / 2); //取数组中间
$left_arr = array_slice($arr, 0, $mid); //拆分数组0-mid这部分给左边left_arr
$right_arr = array_slice($arr, $mid); //拆分数组mid-末尾这部分给右边right_arr
$left_arr = al_merge_sort($left_arr); //左边拆分完后开始递归合并往上走
$right_arr = al_merge_sort($right_arr); //右边拆分完毕开始递归往上走
$arr = al_merge($left_arr, $right_arr); //合并两个数组,继续递归
return $arr;
}

$arr = array(12, 5, 4, 7, 8, 3, 4, 2, 6, 4, 9);
print_r(al_merge_sort($arr));

 //3、二分查找-递归

//二分查找-递归
function bin_search($array,$low,$high,$k){
  if($low <= $high){
    $mid = intval(($low+$high)/2);
  }else{
    return false;
  }
  if($array[$mid] == $k){
    return $mid;
  }elseif($k < $array[$mid]){
    return bin_search($array,$low,$mid-1,$k);
  }else{
    return bin_search($array,$mid+1,$high,$k);
  }
}
$arr = array(12, 5, 4, 7, 3, 8, 4, 2, 6, 4, 9);
$index = bin_search($arr,0,10,12); //直接输出为空,不解
echo(intval($index));

//4、二分查找-非递归

function bin_search($arr,$low,$high,$value) {//$arr 数组; $slow 最小索引; $high 最大索引 $value 查找的值
while($low<=$high) { 
  $mid=intval(($low+$high)/2); 
  if($value==$arr[$mid]){
return $mid; 
}elseif($value<$arr[$mid]){
$high=$mid-1; 
}else{
$low=$mid+1; 
} 
}
return false; 
}

//5、快速排序

function quick_sort($arr) {
  $n=count($arr);
  if($n<=1)
    return $arr;
  $key=$arr[0];
  $left_arr=array();
  $right_arr=array();
  for($i=1;$i<$n;$i++) {
    if($arr[$i]<=$key)
      $left_arr[]=$arr[$i];
    else
      $right_arr[]=$arr[$i];
  }
  $left_arr=quick_sort($left_arr);
  $right_arr=quick_sort($right_arr);
  return array_merge($left_arr,array($key),$right_arr);
}

//6、选择排序

function select_sort($arr) {
  $n=count($arr);
  for($i=0;$i<$n;$i++) {
    $k=$i;
    for($j=$i+1;$j<$n;$j++) {
      if($arr[$j]<$arr[$k])
        $k=$j;
    }
    if($k!=$i) {
      $temp=$arr[$i];
      $arr[$i]=$arr[$k];
      $arr[$k]=$temp;
    }
  }
  return $arr;
}

//7、插入排序

function insertSort($arr) {
  $n=count($arr);
  for($i=1;$i<$n;$i++) {
    $tmp=$arr[$i];
    $j=$i-1;
    while($arr[$j]>$tmp) {
      $arr[$j+1]=$arr[$j];
      $arr[$j]=$tmp;
      $j--;
      if($j<0)
        break;
    }
  }
  return $arr;
}
PHP 相关文章推荐
PHP 5.0 Pear安装方法
Dec 06 PHP
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
Mar 15 PHP
Windows下XDebug 手工配置与使用说明
Jul 11 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
Oct 03 PHP
php笔记之:AOP的应用
Apr 24 PHP
在SAE上搭建最新wordpress的方法
Dec 21 PHP
Laravel中使用阿里云OSS Composer包分享
Feb 10 PHP
php实现图片局部打马赛克的方法
Feb 11 PHP
PHP数组和explode函数示例总结
May 08 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
Laravel框架在本地虚拟机快速安装的方法详解
Jun 11 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 PHP
php封装好的人民币数值转中文大写类
Dec 20 #PHP
使用PHP如何实现高效安全的ftp服务器(一)
Dec 20 #PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 #PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
Dec 19 #PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 #PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
Dec 19 #PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
Dec 19 #PHP
You might like
php的ajax框架xajax入门与试用介绍
2010/12/19 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
php之可变变量的实例详解
2017/09/12 PHP
Mootools 1.2教程 输入过滤第二部分(字符串)
2009/09/15 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
javascript自定义加载loading效果
2020/09/15 Javascript
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python中xrange和range的区别
2014/05/13 Python
用Python写冒泡排序代码
2016/04/12 Python
python使用fork实现守护进程的方法
2017/11/16 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
python生成器推导式用法简单示例
2019/10/08 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
Boden美国官网:英伦原创时装品牌
2017/07/03 全球购物
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
公务员保密工作承诺书
2015/05/04 职场文书
回门宴新娘答谢词
2015/09/29 职场文书
教师远程培训心得体会
2016/01/09 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android