PHP面试常用的几种算法(建议收藏)

1.冒泡排序,对像可以是数组

function bubble_sort($array){   
    $count = count($array);
    if ($count <= 0) {
        return false;
    }
    for($i=0; $i<$count; $i++){
        for($j=$count-1; $j>$i; $j--){
            if ($array[$j] < $array[$j-1]){
                $tmp = $array[$j];
                $array[$j] = $array[$j-1];
                $array[$j-1] = $tmp;
	    }
	}
    }
    return $array;
}

快速排序,对象可以是数组

function quick_sort($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 = quick_sort($left_arr);
    $right_arr = quick_sort($right_arr);
    return array_merge($left_arr, array($key), $right_arr);
}

二分查找,查找数组中某个元素

function bin_sch($array, $low, $high, $k){
    if ($low <= $high){
        $mid = intval(($low+$high)/2);
	if ($array[$mid] == $k){
	    return $mid;
	}elseif ($k < $array[$mid]){
	    return bin_sch($array, $low, $mid-1, $k);
	}else{
	    return bin_sch($array, $mid+1, $high, $k);
	}
    }
    return -1;
}

顺序查找,查找数组中某个元素

function seq_sch($array, $n, $k){
    $array[$n] = $k;
    for($i=0; $i<$n; $i++){
        if($array[$i]==$k){
            break;
	}
    }
    if ($i<$n){
        return $i;
    }else{
        return -1;
    }
}

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

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;
}
发布了14 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Crazy_shark/article/details/103700737