递推算法
<?php
$f[1] = 1;
$f[2] = 1;
$des = 15;
for($i = 3; $i <= $des; $i++ ){
$f[$i] = $f[$i - 1]+$f[$i - 2];
}
echo '<pre>';
print_r($f);
?>
递归算法
<?php
function recursion($n){
if($n == 1 || $n == 2 ) return 1;
return recursion($n - 1)+recursion($n - 2);
}
echo recursion(15)
?>
冒泡排序
<?php
$arr = array(1,4,2,9,7,5,8);
for($i=0; $i < count($arr);$i++){
for($j=0;$j < count($arr)-1-$i;$j++){
if($arr[$j] > $arr[$j+1]){
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
echo "<pre>";
print_r($arr);
?>
选择排序
<?php
$arr = array(1,5,2,9,6,3,4);
$len = count($arr);
for($i = 0;$i < $len;$i++){
$min = $i;
for($j = $i +1;$j < $len;$j++){
if($arr[$j] < $arr[$min]){
$min = $j;
}
}
if($min != $i){
$temp = $arr[$min];
$arr[$min] = $arr[$i];
$arr[$i] = $temp;
}
}
echo "<pre>";
print_r($arr);
?>
插入排序
<?php
$arr = array(4,2,6,8,9,5);
$len = count($arr);
for($i = 1;$i < $len;$i++){
$temp = $arr[$i];
for($j = $i - 1;$j >= 0;$j--){
if($arr[$j] > $temp){
$arr[$j+1] = $arr[$j];
$arr[$j] = $temp;
}else{
break;
}
}
}
echo '<pre>';
print_r($arr);
?>
优化
<?php
$arr = array(4,2,6,8,9,5);
$len = count($arr);
for($i = 1;$i < $len;$i++){
$temp = $arr[$i];
$change = false;
for($j = $i - 1;$j >= 0;$j--){
if($arr[$j] > $temp){
$arr[$j+1] = $arr[$j];
$change = true;
}else{
break;
}
}
if($change){
$arr[$j+1] =$temp;
}
}
echo '<pre>';
print_r($arr);
?>
快递排序
<?php
$arr = array(1,6,3,4,9,2,7,8);
function QuickSort($arr){
$len = count($arr);
if($len <= 1) return $arr;
$left = $right =array();
for($i = 1;$i < $len;$i++){
if($arr[$i] < $arr[0]){
$left[] = $arr[$i];
}else{
$right[] = $arr[$i];
}
}
$left = QuickSort($left);
$right = QuickSort($right);
return array_merge($left,(array)$arr[0],$right);
}
echo '<pre>';
print_r(QuickSort($arr));
?>
归并排序
二路归并
<?php
$arr1 = array(1,3,5);
$arr2 = array(2,4,6);
$arr3 = array();
while(count($arr1) && count($arr2)){
$arr3[] = $arr1[0] < $arr2[0] ? array_shift($arr1) : array_shift($arr2);
}
echo "<pre>";
print_r(array_merge($arr3,$arr1,$arr2));
?>
实现
<?php
$arr = array(4,7,2,1,5,9,3);
function MergeSort($arr){
$len = count($arr);
if($len <= 1)return $arr;
$middle = floor($len/2);
$left =array_slice($arr,0,$middle);
$right = array_slice($arr,$middle);
$left = MergeSort($left);
$right = MergeSort($right);
$m = array();
while(count($left) && count($right)){
$m[] = $left[0] < $right[0] ? array_shift($left) : array_shift($right);
}
return array_merge($m,$left,$right);
}
echo '<pre>';
print_r(MergeSort($arr));
?>
查找排序
顺序查找
<?php
$arr =array(1,3,6,8,23,68,100);
function CheckOrder($arr,$num){
$len = count($arr);
for($i = 0;$i < $len;$i++){
if($arr[$i] == $num){
return $i;
}
}
return false;
}
var_dump(CheckOrder($arr,5));
?>
二分查找
<?php
$arr =array(1,3,6,8,23,68,100);
$res = 100;
function CheckOrder1($arr,$res){
$right = count($arr);
$left = 0;
while($left <= $right){
$middle =(int)floor(($right + $left)/2);
if($arr[$middle] == $res){
return $middle + 1;
}
if($arr[$middle] < $res){
$left = $middle + 1;
}else{
$right = $middle - 1;
}
}
return false;
}
var_dump(CheckOrder1($arr,$res));
?>