一、冒泡算法
原理:两两相邻的数进行比较,如果反序就交换,否则不交换
实例:
//冒泡
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;