您好,登錄后才能下訂單哦!
這篇文章主要介紹了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í)!
免責(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)容。