您好,登錄后才能下訂單哦!
這篇文章主要介紹了php基本算法有哪些,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
基本算法:
冒泡排序
//逐行對比,滿足條件則交換 function bubbleSort($arrData,$sort = 'desc') { if(empty($arrData)) return $arrData; //默認有序 $isSorted = true; $nCount = count($arrData); for($i = 0; $i < $nCount; $i++) { //對比次數隨著循環逐漸減少,因為后面的數據已經處理為有序 for($j = 0; $j < ($nCount - $i - 1); $j++) { //執行判斷 $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; }
快速排序
//選取一個標準,和其他數據對比后將數據分為兩批,遞歸執行后合并 function quickSort(&$arr, $sort = 'asc'){ //檢查數據,多于一個數據才執行 $nCount = count($arr); if($nCount > 1) { //選取標準(第一個數據) $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; }
二分查找
//假設數據是按升序排序的,對于給定值x,從序列的中間位置開始比較,如果當前位置值等于x,則查找成功; //若x小于當前位置值,則在數列的前半段中查找;若x大于當前位置值則在數列的后半段中繼續查找,直到找到為止 function binSearch($toSearch,$arr) { //確定當前的檢索范圍 $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; }
選擇排序
//在第一次循環中,假設第一個數是最小的;然后跟第二個數比較,一直比到最后,找出最小值,然后把最小值跟第一個數的位置互換; //再進行下一次循環,找出最小值跟第二個位置的數互換;一直循環數組的個數減去1次;數組就成了有序的了 function selectSort($arr) { $nCount = count($arr); //遍歷取得需要排序的數 for($i = 0; $i < $nCount; $i++) { //選擇需要比較的數,從$i開始到結束 for($j = $i + 1; $j < $nCount; $j++) { //比較 if($arr[$j] < $arr[$i]) { $temp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $temp; } } } return $arr; }
感謝你能夠認真閱讀完這篇文章,希望小編分享php基本算法有哪些內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。