PHP算法面试题 排序和查找
2017-09-19 17:27
288 查看
1.使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组 //冒泡排序(数组排序) public static function bubble_sort(array $array){ for($i=0;$i<count($array);$i++){ for($j=count($array)-1;$j>$i;$j--){ if($array[$j] > $array[$j-1]){ $temp = $array[$j]; $array[$j]=$array[$j-1]; $array[$j-1]=$temp; } } } return $array; //返回值 } //快速排序(数组排序) public static function quick_sort($array){ if( ! is_array($array) ){ return $array; }else if(count($array) < 2 ){ return $array; } $key = $array[0]; $leftArr=array(); $rightArr=array(); for($i=1;$i<count($array);$i++){ if($array[$i] >= $key){ $leftArr[]= $array[$i]; }else{ $rightArr[]=$array[$i]; } } $leftArr=self::quick_sort($leftArr); $rightArr=self::quick_sort($rightArr); return array_merge($leftArr,array($key),$rightArr); } //选择排序(数组排序) function select_sort(array $array){ $len=count($array); for($i=0;$i<$len;$i++){ $mix=$i; for($j=$i+1;$j<$len;$j++){ if($array[$mix] > $array[$j] ){ $mix = $j; } } if($mix != $i){ $temp = $array[$i]; $array[$i] =$array[$mix]; $array[$mix]=$temp; } } return $array; } //插入排序 //2. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组 //二分查找(数组里查找某个元素) //递归 //$low:数组的开始下标 //$high:数组的结束下标 $k:查找的值 function two_search($array,$low,$high,$val){ sort($array); // print_r($array); if($low<=$high){ //取中间的下标 $mid=intval( ($low+$high) / 2 ); echo $mid.'<br/>'; if($array[$mid] == $val){ return $mid; }else if($val < $array[$mid]){ return $this->two_search($array,$low,$mid-1,$val); }else{ return $this->two_search($array,$mid+1,$high,$val); } } return -1; } //顺序查找(数组里查找某个元素) function seq_sch($array,$k){ //$array为数组,$k为要查找的值 $n=count($array); //count函数用于计算数组中的元素个数 $array[$n] = $k; //新建一个元素,并将k存放进去 for($i=0; $i<$n; $i++){ if($array[$i]==$k){ //逐一比较 break; } } if ($i<$n){ //如果在新元素的前面找到了要找的值,则返回该值 return $i; }else{ return -1; } } //非递归 function two_search($array,$low,$high,$val){ while($low <= $high){ $mid = intval( ($low+$high)/2 ); if($array[$mid] == $val){ return $mid; }else if( $val < $array[$mid]){ $low=$mid - 1; }else{ $high=$mid + 1; } } return -1; } 3.写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数 二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序 function array_sort($arr, $keys, $order=0) { if (!is_array($arr)) { return false; } $keysvalue = array(); foreach($arr as $key => $val) { $keysvalue[$key] = $val[$keys]; } if($order == 0){ asort($keysvalue); }else { arsort($keysvalue); } reset($keysvalue); foreach($keysvalue as $key => $vals) { $keysort[$key] = $key; } $new_array = array(); foreach($keysort as $key => $val) { $new_array[$key] = $arr[$val]; } return $new_array; } ```
相关文章推荐
- 算法--Two sum之排序数字二分查找实现
- PHP算法面试题
- 算法题001 剑指Offer 面试题三:二维数组中的查找
- PHP算法学习之“简单的选择排序“
- php面试题之算法篇
- 产品列表页分类筛选、排序的算法实现(PHP)
- (算法课大报告)大数据的查找与排序
- 基本算法简单实现-二分法查找、合并排序、冒泡排序、插入排序、选择排序、快速排序
- PHP实现常见算法之二分查找法
- PHP算法之二分查找和顺序查找
- php面试题之二——数据结构和算法(高级部分)
- PHP数据结构基本算法一:矩阵转置 求素数 冒泡排序 选择排序
- PHP算法——文件大小排序(KB、MB、GB、TB)
- [php] 数据结构&算法(PHP描述) 快速排序 quick sort
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 啊哈!算法 - 桶排序,冒泡排序,快速排序 - PHP实现
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 算法面试-基本题-排序 c++&java&php
- (算法课大报告)大数据的查找与排序