大头

PHP面试题

创建多级目录

//创建多级目录
$path = "./first/two/three";
if(is_dir($path)){
    echo "已存在相同目录";
    exit();
}

if(mkdir($path,0777,true)){
echo  '创建目录成功';
}

冒泡排序 一个数组

$arr = array(30, 2, 36, 14, 10, 25, 23, 85, 29, 105);
//大 --》 小
/**
 *冒泡排序
 * 思路:选择一个参考点,将参考点一次与后面的值进行比较,然后进行数据交换
 * @param $arr
 */
function bouleSort($arr)
{
    $len = count($arr);
    for ($i = 0; $i < $len; $i++) {
        echo $len - $i;
        for ($j = $i + 1; $j < $len; $j++) {
            if ($arr[$i] < $arr[$j]) {
                $tmp = $arr[$j];
                $arr[$j] = $arr[$i];
                $arr[$i] = $tmp;
            }
        }
    }
    return $arr;
}

选择排序一个数组

$arr = array(30, 2, 36, 14, 10, 25, 23, 85, 29, 105);
/**
 * 选择排序
 * 以数组的第一值与数组后面的最小值进行排序
 * @param $arr
 * @return mixed
 */
function selectSort($arr)
{
    $len = count($arr);
//该是素组是否可排序
    if ($len > 1) {
        for ($i = 0; $i < $len - 1; $i++) {
            //循环找出最小的
            for ($j = $i + 1; $j < $len - $i - 1; $j++) {
                if ($arr[$j + 1] < $arr[$j]) {
                    $tmp = $arr[$j];
                    $arr[$j] = $arr[$j + 1];
                    $arr[$j + 1] = $tmp;

                }
            }
            //只有前面$i >$i+1 的值才进行替换
            if ($arr[$i] > $arr[$i + 1]) {
                $tmp = $arr[$i + 1];
                $arr[$i + 1] = $arr[$i];
                $arr[$i] = $tmp;
            }
        }
        return $arr;
    }
}

快速排序

/**
 * 快速排序
 * 原理:选择一个排序的参考点(通常以数组的第一个值为参考点),大于参考值和小于参考点值分开,最后合并数组
 * @param $arr
 * @return array
 */
$arr = array(30, 2, 36, 14, 10, 25, 23, 85, 29, 105);
function quickSort($arr)
{
    $len = count($arr);
    $array_left = array();
    $array_right = array();
    //该是素组是否可排序
    if ($len > 1) {
        for ($i = 1; $i < $len; $i++) {

            if ($arr[$i] > $arr[0]) {
                //放到右边数组
                $array_right[] = $arr[$i];
            } else {
                //放到左边数组
                $array_left[] = $arr[$i];
            }
        }
        $array_right = quickSort($array_right);
        $array_left = quickSort($array_left);
        /* var_dump($array_right);
         var_dump($array_left);*/
        return array_merge($array_left, array($arr[0]), $array_right);
    } else {
        return $arr;
    }
}

var_dump(quickSort($arr));

写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数。

第一种:

$person = array(
    array('id' => 2, 'name' => 'zhangsan', 'age' => 23),
    array('id' => 5, 'name' => 'lisi', 'age' => 28),
    array('id' => 3, 'name' => 'pengdatou', 'age' => 17),
    array('id' => 3, 'name' => 'xiaohei', 'age' => 17),
    array('id' => 3, 'name' => 'laowan', 'age' => 17),
);
//id
/**
 * @param $arr
 * @param string $subject 排序的依据
 * @return array
 */
function sortArray($arr, $subject = 'id')
{
    //必须检查数据合法性
    if (is_array($arr)) {
        $len = count($arr);
        for ($i = 0; $i < $len; $i++) {
            for ($j = $i + 1; $j < $len; $j++) {
                if ($arr[$i][$subject] < $arr[$j][$subject]) {
                    $tmp = $arr[$i];
                    $arr[$i] = $arr[$j];
                    $arr[$j] = $tmp;
                }
            }
        }
    }
    return $arr;
}
var_dump(sortArray($person, 'name'));

第二种:

/**
 * 思路:
 * 1、将要排序的值从二维数组中拉出来,组成一维数组
 * 2、对一位数组进行排序
 * 3、根据排序的一维数组进行遍历重新生成二维数组
 * @param $arr
 * @param $keys
 * @param int $order
 * @return array|bool
 */
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;
}

//测试
$person = array(
    array('id' => 2, 'name' => 'zhangsan', 'age' => 23),
    array('id' => 5, 'name' => 'lisi', 'age' => 28),
    array('id' => 3, 'name' => 'pengdatou', 'age' => 17),
    array('id' => 3, 'name' => 'xiaohei', 'age' => 17),
    array('id' => 3, 'name' => 'laowan', 'age' => 17),
);
$result = array_sort($person, 'name', 1);
var_dump($result);

折半查找

$arr = array(5, 9, 15, 25, 34, 47, 55);
function seq_sch($arr, $obj, $low, $high)
{
    if ($low <= $high) {
        //注意这里的括号
        $middle = intval(($low + $high) / 2);
        // echo $middle;
        if ($obj > $arr[$middle]) {
            $low = $middle + 1;
        } elseif ($obj == $arr[$middle]) {
            return $middle;
        } elseif ($obj < $arr[$middle]) {
            //小于
            $high = $middle - 1;
        }
       return seq_sch($arr, $obj, $low, $high);
    }
    return "不存在";
}
$len = count($arr);
echo seq_sch($arr, 55, 0, $len - 1);
posted @ 2017-03-28 22:18  and大头  阅读(276)  评论(0编辑  收藏  举报

大头