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);