首页 > 代码库 > php算法

php算法

 1 //插入排序(一维数组)
 2 function insert_sort($arr){
 3     $count = count($arr);
 4     for($i=1; $i<$count; $i++){
 5         $tmp = $arr[$i];
 6         $j = $i - 1;
 7         while($arr[$j] > $tmp){
 8             $arr[$j+1] = $arr[$j];
 9             $arr[$j] = $tmp;
10             $j--;
11          }
12      }
13     return $arr;
14 }
 1 //选择排序(一维数组)
 2 function select_sort($arr){
 3     $count = count($arr);
 4     for($i=0; $i<$count; $i++){
 5         $k = $i;
 6         for($j=$i+1; $j<$count; $j++){
 7             if ($arr[$k] > $arr[$j])
 8                 $k = $j;
 9             if ($k != $i){
10                 $tmp = $arr[$i];
11                 $arr[$i] = $arr[$k];
12                 $arr[$k] = $tmp;
13              }
14          }
15      }
16     return $arr;
17 }
 1 //快速排序(一维数组) 
 2 function quick_sort($array){
 3   if (count($array) <= 1) return $array; 
 4   $key = $array[0];
 5   $left_arr = array();
 6   $right_arr = array();
 7   for ($i=1; $i<count($array); $i++){
 8     if ($array[$i] <= $key)
 9       $left_arr[] = $array[$i];
10     else
11       $right_arr[] = $array[$i];
12   }
13   $left_arr = quick_sort($left_arr);
14   $right_arr = quick_sort($right_arr); 
15   return array_merge($left_arr, array($key), $right_arr);
16 }
 1 //冒泡排序(一维数组)
 2 function bubble_sort($array){
 3     $count = count($array);
 4     if ($count <= 0) return false;
 5     for($i=0; $i<$count; $i++){
 6         for($j=$count-1; $j>$i; $j--){
 7             if ($array[$j] < $array[$j-1]){
 8                 $tmp = $array[$j];
 9                 $array[$j] = $array[$j-1];
10                 $array[$j-1] = $tmp;
11              }
12          }
13      }
14     return $array;
15 } 
 1 //二分查找(递归)
 2 function bin_search($arr,$low,$high,$value) {
 3     if($low>$high)
 4         return false;
 5     else {
 6         $mid=floor(($low+$high)/2);
 7         if($value==$arr[$mid])
 8             return $mid;
 9         elseif($value<$arr[$mid])
10             return bin_search($arr,$low,$mid-1,$value);
11         else
12             return bin_search($arr,$mid+1,$high,$value);
13     }
14 }
 1 //二分查找(非递归)
 2 function bin_search($arr,$low,$high,$value) {
 3     while($low<=$high) {
 4         $mid=floor(($low+$high)/2);
 5         if($value==$arr[$mid])
 6             return $mid;
 7         elseif($value<$arr[$mid])
 8             $high=$mid-1;
 9         else
10             $low=$mid+1;
11     }
12     return false;
13 }
 1 //2.牛年求牛:有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛
 2 function niunum($n) {
 3 static $num = 1;
 4 for ($i = 1; $i <= $n; $i++) {
 5    if ($i >= 4 && $i < 15) {
 6     $num++;
 7     niunum($n - $i);
 8    }
 9    if ($i == 20) $num--;
10 }
11 return $num;
12 }
13 echo niunum(10);
1 //3.合并多个数组,不用array_merge(),思路:遍历每个数组,重新组成一个新数组。
2 function unionArray($a, $b) {
3 $re = array();
4 foreach ($a as $v) $re[] = $v;
5 foreach ($b as $v) $re[] = $v;
6 return $re;
7 }
8 print_r(unionArray(array(1,2,4,5,‘s‘), array(2,5,7,‘c‘,‘d‘)));
1 //8.把数组array(12,34,56,32) 转化为 array(1,2,3,4,5,6,3,2)
2 function changeArr($arr) {
3 return str_split(implode(‘‘, $arr));
4 }
5 print_r(changeArr(array(12,34,56,32)));
 1 //9.把数字1-1亿换成汉字表述,如:123->一百二十三
 2 function intToCnstr($intval) {
 3 $cnNum = array(‘零‘,‘一‘,‘二‘,‘三‘,‘四‘,‘五‘,‘六‘,‘七‘,‘八‘,‘九‘);
 4 $cnUnit = array(‘‘,‘十‘,‘百‘,‘千‘,‘万‘,‘亿‘);
 5 $reCnStr = ‘‘;
 6 $intval = intval($intval);
 7 if ($intval < 10 && $intval >= 0) {
 8    $reCnStr .= $cnNum[$intval];
 9 } elseif ($intval == 1000000000) {
10    $reCnStr .= $cnNum[1].$cnUnit[5];
11 } elseif ($intval < 0 || $intval > 1000000000) {
12    $reCnStr .= ‘‘;
13 } else {
14    $str = strval($intval);
15    $len = strlen($str);
16    for ($i = 0; $i < $len; $i++) {
17     if (intval($str{$i}) != 0) {
18      $reCnStr .= $cnNum[intval($str{$i})];
19      $j = $len - 1 - $i;
20      if ($j < 5) {
21       $reCnStr .= $cnUnit[$j];
22      } elseif ($j >=5 && $j <= 8) {
23       $reCnStr .= $cnUnit[$j - 4];
24      }
25     } else {
26      if ($i > 0 && $str{$i} != $str{$i - 1}) $reCnStr .= $cnNum[0];
27     }
28    }
29 }
30 return $reCnStr;
31 }
32 echo intToCnstr(9912016);