登录  /  注册
PHP面试题之算法解析,php试题解析_PHP教程
php中文网
发布: 2016-07-12 09:07:41
原创
539人浏览过

PHP面试题之算法解析,php试题解析


面试中经常被问到会什么算法,这里整合一些常见的算法及它们的实现原理.下面的例子都是经过测试可用的,如果有什么问题请告知!!

本人小白,如果有更好的实现方式,敬请赐教,感激不尽!!!!

冒泡排序,快速排序,选择排序,二分法查找,快速查找

/** 
* 冒泡排序
* 相邻2数比较,小的在前,大的在后
* 数组有几个元素,就要比较几轮 $i
* 每轮需要比较的次数为,数组元素个数-已比较的次数 $j
* @param   array  $array 要操作的数组
* @return  array  $array 返回的数组
*/
function bubbleSort($array)
{
        $cnt = count($array);
        for($i = 0; $i < $cnt ; $i++){
                for($j = 0 ; $j < ($cnt-$i-1) ; $j++){
                        if($array[$j] > $array[$j+1]){
                                $temp = $array[$j];
                                $array[$j] = $array[$j+1];
                                $array[$j+1] = $temp;
                        }
                }
        }
        return $array;
}
登录后复制

/**
* 快速排序
* 递归实现
* 获取数组第一个数,循环使后面的数与其比较,
* 比其小的放在一个数组中,比其大的放在一个数组中
* 将2个数组递归调用,直到最终数组元素小于等于1时,没有可以比较的元素
* 通过array_merge函数,将比较的数组按大小顺序合并然后一层一层的return出去,最终实现从小到大排序
* @param array $array 要操作的数组
* @return array $array 返回的数组
*/

function quickSort($array)
{
        if(count($array) <= 1 ) return $array;
        $key = $array[0];
        $left_arr = array();
        $right_arr = array();
        for ($i=1;$i<count($array);$i++){
                if($array[$i] <= $key){
                        $left_arr[] = $array[$i];
                }else{
                        $right_arr[] = $array[$i];
                }
        }

        $left_arr = quickSort($left_arr);
        $right_arr = quickSort($right_arr);
        return array_merge($left_arr,array($key),$right_arr);

}
登录后复制

/**
* 选择排序
* 2层循环
* 第一层逐个获取数组的值 $array[$i]
* 第二次遍历整个数组与$array[$i]比较($j=$i+1已经比较的,不再比较,减少比较次数)
* 如果比$array[$i]小,就交换位置
* 这样一轮下来就可以得到数组中最小值
* 以此内推整个外层循环下来就数组从小到大排序了
* @param array $array 要比较的数组
* @return array $array 从小到大排序后的数组
*/

function selectSort($array){
        $cnt = count($array);
        for($i=0;$i<$cnt;$i++){
                for($j=($i+1);$j<$cnt;$j++){
                        if($array[$i]>$array[$j]){
                                $tmp = $array[$i];
                                $array[$i] = $array[$j];
                                $array[$j] = $tmp;
                        }
                }
        }
        return $array;
}
登录后复制

/**
* 二分法查找一个值在数组中的位置
* @param array $array 操作的数组
* @param void $val 要查找的值
* @return int $mid 返回要查找的值在数组中的索引,如果不存在返回-1
*/

function binarySearch($array,$val)
{
        $cnt = count($array);
        $low = 0;
        $high = $cnt - 1;
        while ($low <= $high){
                $mid = intval(($low + $high)/2);
                if($array[$mid] == $val){
                        return $mid;
                }

                if($array[$mid] < $val){
                        $low = $mid + 1;
                }

                if($array[$mid] > $val){
                        $high = $mid - 1;
                }
        }

        return -1;
}
登录后复制

/**
* 顺序查找(最简单,效率低下)
* 通过循环数组查找要的值
* @param array $array 要操作的数组
* @param void $val  要查找的值
* @return int 如果存在,返回该值在数组中的索引,否则返回-1
*/

function seqSch($array,$val)
{
        for($i=0;$i<count($array);$i++){
                if($array[$i] == $val)
                        break;
        }

        if($i < count($array)){
                return $i;
        }else{
                return -1;
        }
}
登录后复制

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1059464.htmlTechArticlePHP面试题之算法解析,php试题解析 面试中经常被问到会什么算法,这里整合一些常见的算法及它们的实现原理.下面的例子都是经过测试可用...

相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 技术文章
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2023 //m.sbmmt.com/ All Rights Reserved | 苏州跃动光标网络科技有限公司 | 苏ICP备2020058653号-1

 | 本站CDN由 数掘科技 提供

登录PHP中文网,和优秀的人一起学习!
全站2000+教程免费学