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 相关文章推荐
JAVA/JSP学习系列之四
Oct 09 PHP
一篇不错的PHP基础学习笔记
Mar 18 PHP
php批量缩放图片的代码[ini参数控制]
Feb 11 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
php编写的简单页面跳转功能实现代码
Nov 27 PHP
分享最受欢迎的5款PHP框架
Nov 27 PHP
php数组添加与删除单元的常用函数实例分析
Feb 16 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
php命名空间设计思想、用法与缺点分析
Jul 17 PHP
PHP7 整型处理机制修改
Mar 09 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支持页面回退的两种方法
2008/01/10 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
微信自定义分享php代码分析
2016/11/24 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
jQuery ajax(复习)—Baidu ajax request分离版
2013/01/24 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
python中字符串数组逆序排列方法总结
2019/06/23 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
python属于软件吗
2020/06/18 Python
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
材料采购员岗位职责
2013/12/17 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
优秀研究生主要事迹
2014/06/03 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
演讲稿开场白台词
2014/08/25 职场文书
烈士陵园观后感
2015/06/08 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书
基于python实现银行管理系统
2021/04/20 Python