溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php基本算法有哪些

發(fā)布時間:2020-10-29 10:12:53 來源:億速云 閱讀:148 作者:小新 欄目:編程語言

這篇文章主要介紹了php基本算法有哪些,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

基本算法:

冒泡排序

//逐行對比,滿足條件則交換
function bubbleSort($arrData,$sort = 'desc')
{
    if(empty($arrData)) return $arrData;
    //默認(rèn)有序
    $isSorted = true;
    $nCount = count($arrData);
    for($i = 0; $i < $nCount; $i++) {
        //對比次數(shù)隨著循環(huán)逐漸減少,因?yàn)楹竺娴臄?shù)據(jù)已經(jīng)處理為有序
        for($j = 0; $j < ($nCount - $i - 1); $j++) {
            //執(zhí)行判斷
            $isChange = $sort == 'desc' ? $arrData[$j] < $arrData[$j+1] : $arrData[$j] > $arrData[$j+1];
            if($isChange) {
                //首次對比,判斷是否有序
                $isSorted = false;
                $temp = $arrData[$j];
                $arrData[$j] = $arrData[$j+1];
                $arrData[$j+1] = $temp;
            }
        }
        if($isSorted) break;
    }
    return $arrData;
}

快速排序

//選取一個標(biāo)準(zhǔn),和其他數(shù)據(jù)對比后將數(shù)據(jù)分為兩批,遞歸執(zhí)行后合并
function quickSort(&$arr, $sort = 'asc'){
    //檢查數(shù)據(jù),多于一個數(shù)據(jù)才執(zhí)行
    $nCount = count($arr);
    if($nCount > 1) {
        //選取標(biāo)準(zhǔn)(第一個數(shù)據(jù))
        $nStandard = $arr[0];
        $arrLeftData = [];
        $arrRightData = [];
        //遍歷,注意這里從1開始比較
        for($i = 1; $i < $nCount; $i++) {
            if($sort == 'desc') {
                $arr[$i] > $nStandard ? $arrLeftData[] = $arr[$i] : $arrRightData[] = $arr[$i];
            } else {
                $arr[$i] > $nStandard ? $arrRightData[] = $arr[$i] : $arrLeftData[] = $arr[$i];
            }
        }
        $arr = array_merge($this->quickSort($arrLeftData, $sort), array($nStandard), $this->quickSort($arrRightData, $sort));
    }
    return $arr;
}

二分查找

//假設(shè)數(shù)據(jù)是按升序排序的,對于給定值x,從序列的中間位置開始比較,如果當(dāng)前位置值等于x,則查找成功;
//若x小于當(dāng)前位置值,則在數(shù)列的前半段中查找;若x大于當(dāng)前位置值則在數(shù)列的后半段中繼續(xù)查找,直到找到為止
function binSearch($toSearch,$arr)
{
    //確定當(dāng)前的檢索范圍
    $nCount = count($arr);
    //低位鍵,初始為0
    $nLowNum = 0;
    //高位鍵,初始為末尾 
    $nHighNum = $nCount - 1;
    while($nLowNum <= $nHighNum) {
        //選定大概中間鍵
        $nMiddleNum = intval(($nHighNum + $nLowNum)/2);
        if($arr[$nMiddleNum] > $toSearch) {
            //比檢索值大
            $nHighNum = $nMiddleNum - 1;
        } elseif ($arr[$nMiddleNum] < $toSearch) {
            //比檢索值小
            $nLowNum = $nMiddleNum + 1;
        } else {
            return $nMiddleNum;
        }
    }
    return false;
}

順序查找

function seqSearch($arr,$toSearch)
{
    $nCount = count($arr);
    for ($i=0; $i < $nCount; $i++) {
        if ($arr[$i] == $toSearch) {
            return $i;
        }
    }
    return -1;
}

選擇排序

//在第一次循環(huán)中,假設(shè)第一個數(shù)是最小的;然后跟第二個數(shù)比較,一直比到最后,找出最小值,然后把最小值跟第一個數(shù)的位置互換;
//再進(jìn)行下一次循環(huán),找出最小值跟第二個位置的數(shù)互換;一直循環(huán)數(shù)組的個數(shù)減去1次;數(shù)組就成了有序的了 
function selectSort($arr)
{
    $nCount = count($arr);
    //遍歷取得需要排序的數(shù)
    for($i = 0; $i < $nCount; $i++) {
        //選擇需要比較的數(shù),從$i開始到結(jié)束
        for($j = $i + 1; $j < $nCount; $j++) {
            //比較
            if($arr[$j] < $arr[$i]) {
                $temp = $arr[$i];
                $arr[$i] = $arr[$j];
                $arr[$j] = $temp;
            }
        }
    }
    return $arr;  
}

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享php基本算法有哪些內(nèi)容對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI