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 相关文章推荐
spl_autoload_register与autoload的区别详解
Jun 03 PHP
利用php绘制饼状图的实现代码
Jun 07 PHP
php获取淘宝分类id示例
Jan 16 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
Sep 28 PHP
微信公众平台实现获取用户OpenID的方法
Apr 15 PHP
php实现的用户查询类实例
Jun 18 PHP
浅谈php错误提示及查错方法
Jul 14 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
php中照片旋转 (orientation) 问题的正确处理
Feb 16 PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 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日历程序
2006/12/06 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
浅谈php调用python文件
2019/03/29 PHP
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
QML实现圆环颜色选择器
2019/09/25 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
Python中变量交换的例子
2014/08/25 Python
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
Python的设计模式编程入门指南
2015/04/02 Python
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
python实现电脑自动关机
2018/06/20 Python
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
Python常用特殊方法实例总结
2019/03/22 Python
django中related_name的用法说明
2020/05/20 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
2021/01/09 Python
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
上课迟到检讨书100字
2014/01/11 职场文书
聘任证明怎么写
2015/03/02 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
PHP使用非对称加密算法RSA
2021/04/21 PHP
python字符串的一些常见实用操作
2022/04/06 Python