PHP 简易的算法大全

一、冒泡算法

原理:两两相邻的数进行比较,如果反序就交换,否则不交换

实例:

//冒泡
function Bubbling($arr){
    $count=count($arr);

    if($count <= 1){
        return $arr;
    }

    for($i=0;$i<$count;$i++){
        for($j=$i+1;$j<$count;$j++){
            if($arr[$i]>$arr[$j]){
                $tmp=$arr[$j];
                $arr[$j]=$arr[$i];
                $arr[$i]=$tmp;
            }
        }
    }

    return $arr;
}

$arr1=[554,7,735,21,35428,66,22,0];
$Bubbling = Bubbling($arr1);
print_r($Bubbling);
二、递归算法

原理:调用自身的函数。

应用到地方:递归算法一般可以运用到,微信小程序的会员的三级分销功能,或者三级分类和无限分类等等的地方,算法其实可以运用到现实中很多功能的,需要自己的发掘。

实例:

//递归
function digui($a=0,&$result=array()){
    $a++;

    if ($a<6){
        $result[]=$a;
        digui($a,$result);
    }
    echo $a."";
    return $result;
}

print_r(digui());
三、排序算法

原理:按一定的顺序检查数组中每一个元素,直到要找到锁要寻找的特定指为止

实例:

<?php
//排序
function paixu($array ) {  
	$ca = count($array);
    if ($ca <= 1) return  $array;  
    $key = $array [0];  
    $left_arr  = array();  
    $right_arr = array();  
    for ($i= 1; $i<$ca; $i++){  
        if ($array[ $i] <= $key)  
            $left_arr [] = $array[$i];  
        else  
            $right_arr[] = $array[$i];  
    }  
    $left_arr = paixu($left_arr);  
    $right_arr = paixu($right_arr);  
    return array_merge($left_arr , array($key), $right_arr);  
}  

$array = array(3,9,8,6,7,2,0,1,5,8);
$aaa = paixu($array);
print_r($aaa);
四、二分查询算法

原理:简单的来说,就是一个数组,你想查询数组里面某一个数据,就可以用这个算法,一、他可以减少你查询的数据,二、提高了查询的速度。比喻你两百万的数据你普通的查询就要一百万次了,二分查询只要五十次。二分查询又称折半查找。

实例:

<?php
/**
 * 二分查询算法
 * @param $array
 * @param $low
 * @param $count
 * @param $k
 * @return int|string
 */
function dichotomy($array, $low, $count, $k){
    //比较数组是否有数据
    if ($low <= $count){
        //折半
        $index = intval(($low+$count)/2);
        //查询中间的是否有想要的数据
        if ($array[$index] == $k){
            return $index;
        }elseif ($k < $array[$index]){
            //如果中间值小于要查询的值,那么直接将中间值的k减1当作查询范围的最大值,参与下次循环
            return dichotomy($array, $low, $index-1, $k);
        }else{
            //如果中间值大于于要查询的值,那么直接将中间值的k减1当作查询范围的最小值,参与下次循环
            return dichotomy($array, $index+1, $count, $k);
        }
    }
   return '没有数据';
}
$array = array(1,2,4,87,3,5,99,74,8);//查询的数组
$count = count($array);//数组的总数
$data = dichotomy($array,0,$count,5);//访问方法
echo $data;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值