现在的位置: 首页 > PHP开发 > 正文
PHP常用算法
2013年06月30日 PHP开发 ⁄ 共 2712字 暂无评论 ⁄ 被围观 1,048 views+
//1、冒泡排序
function bubble_sort($arr) {
     $n=count($arr);
     for($i=0;$i<$n-1;$i++){
         for($j=$i+1;$j<$n;$j++) {
             if($arr[$j]<$arr[$i]) {
                 $temp=$arr[$i];
                 $arr[$i]=$arr[$j];
                 $arr[$j]=$temp;
             }
         }
     }
     return $arr;
}
//2、归并排序
function Merge(&$arr, $left, $mid, $right) {
   $i = $left;
   $j = $mid + 1;
   $k = 0;
   $temp = array();
   while ($i <= $mid && $j <= $right)
   {
     if ($arr[$i] <= $arr[$j])
       $temp[$k++] = $arr[$i++];
     else
       $temp[$k++] = $arr[$j++];
   }
   while ($i <= $mid)
     $temp[$k++] = $arr[$i++];
   while ($j <= $right)
     $temp[$k++] = $arr[$j++];
   for ($i = $left, $j = 0; $i <= $right; $i++, $j++)
     $arr[$i] = $temp[$j];
}
function MergeSort(&$arr, $left, $right)
{
   if ($left < $right)
   {
     $mid = floor(($left + $right) / 2);
     MergeSort($arr, $left, $mid);
     MergeSort($arr, $mid + 1, $right);
     Merge($arr, $left, $mid, $right);
   }
}
//3、二分查找-递归
function bin_search($arr,$low,$high,$value) {
     if($low>$high)
         return false;
     else {
         $mid=floor(($low+$high)/2);
         if($value==$arr[$mid])
             return $mid;
         elseif($value<$arr[$mid])
             return bin_search($arr,$low,$mid-1,$value);
         else
             return bin_search($arr,$mid+1,$high,$value);
     }
}
//4、二分查找-非递归
function bin_search($arr,$low,$high,$value) {
     while($low<=$high) {
         $mid=floor(($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;

}

给我留言

您必须 [ 登录 ] 才能发表留言!