码迷,mamicode.com
首页 > 编程语言 > 详细

PHP面试题之算法解析

时间:2015-10-10 12:30:58      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

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

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

/** 
* 冒泡排序
* 相邻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);

}

 

PHP面试题之算法解析

标签:

原文地址:http://www.cnblogs.com/CodeAnti/p/4866269.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!