PHP經(jīng)典算法題

PHP學(xué)習(xí)之路---算法題

1.使用PHP描述順序查找和二分查找(也叫做折半查找)算法,順序查找必須考慮效率,對(duì)象可以是一個(gè)有序數(shù)組

二分查找(數(shù)組里查找某個(gè)元素)

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;
}

順序查找(數(shù)組里查找某個(gè)元素)

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;
    }
}

2.使用PHP描述冒泡排序和快速排序算法,對(duì)象可以是一個(gè)數(shù)組
冒泡排序(數(shù)組排序)

冒泡排序

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;
}
快速排序(數(shù)組排序)
function quick_sort($array) {
    if (count($array) <= 1) return $array;
    $key = $array[0];
    $left_arr = array();
    $right_arr = array();
    for ($i=1; $i;$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);
}

3.寫一個(gè)二維數(shù)組排序算法函數(shù),能夠具有通用性,可以調(diào)用php內(nèi)置函數(shù)

二維數(shù)組排序, $arr是數(shù)據(jù),$keys是排序的健值,$order是排序規(guī)則,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;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 排序算法基礎(chǔ) 排序算法,是一種能將一串?dāng)?shù)據(jù)按照特定的排序方式進(jìn)行排列的一種算法,一個(gè)排序算法的好壞,主要從時(shí)間復(fù)雜...
    jackyshan閱讀 4,301評(píng)論 3 11
  • 1.使對(duì)象可以像數(shù)組一樣進(jìn)行foreach循環(huán),要求屬性必須是私有。(Iterator模式的PHP5實(shí)現(xiàn),寫一類實(shí)...
    史史小子閱讀 332評(píng)論 0 0
  • 關(guān)于我的倉庫 這篇文章是我為面試準(zhǔn)備的學(xué)習(xí)總結(jié)中的一篇 我將準(zhǔn)備面試中找到的所有學(xué)習(xí)資料,寫的Demo,寫的博客都...
    太陽騎士索拉爾閱讀 1,246評(píng)論 0 7
  • 基礎(chǔ)篇 1.寫出如下程序的輸出結(jié)果 輸出結(jié)果是“aaaaaa”分析如下:首先PHP內(nèi)置有一種規(guī)則是:當(dāng)有兩個(gè)變量同...
    阿澤453閱讀 336評(píng)論 0 0
  • 那個(gè)地方還在腐爛,我一度以為它停止了。甚至斷定已經(jīng)痊愈。 回答是否定的。 它只是被人蒙上了一層亮晶晶粉色的紗,然后...
    真的瀟呀閱讀 269評(píng)論 0 0

友情鏈接更多精彩內(nèi)容