摘要:快速排序快速排序是對冒泡排序的一種改進。獲取中間數(shù)兩值相等,返回元素比目標(biāo)大,查找左部元素比目標(biāo)小,查找右部查找失敗擴展閱讀冒泡排序?qū)崿F(xiàn)快速排序?qū)崿F(xiàn)各種經(jīng)典算法常見算法面試篇實現(xiàn)二分查找法
本書的 GitHub 地址:https://github.com/todayqq/PH...
算法可以說是大廠的必考題,對于算法,一定要理解其中的精髓、原理。
冒泡排序
冒泡排序的原理:一組數(shù)據(jù),比較相鄰數(shù)據(jù)的大小,將值小數(shù)據(jù)在前面,值大的數(shù)據(jù)放在后面。
function bubble_sort($arr) { $count = count($arr); if (0 == $count) { return false; } for($i = 0; $i < $count; $i++){ for($j = 0; $j< $count-1-$i; $j++){ if($arr[$j] > $arr[$j+1]){ $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } } } return $arr; }
這樣的一個數(shù)組 array(6, 3, 8, 2, 9, 1),排序過程是怎樣的?細節(jié)問題不在過多論述,有興趣可以從擴展閱讀中尋找答案。
快速排序
快速排序是對冒泡排序的一種改進。
實現(xiàn)思想是:通過一趟排序?qū)⒋庞涗浄指畛瑟毩⒌膬刹糠?,其中一部分的關(guān)鍵字均比另一部分記錄的關(guān)鍵字小,則可分別對這兩部分記錄繼續(xù)進行快速排序,整個排序過程可以遞歸進行,以達到整個序列有序的目的。
簡單來說就是:找到當(dāng)前數(shù)組中的任意一個元素(一般選擇第一個元素),作為標(biāo)的,新建兩個空數(shù)組,遍歷整個數(shù)組元素,如果遍歷到的元素比當(dāng)前的元素要小,那么就放到左邊的數(shù)組,否則放到右面的數(shù)組,然后再對新數(shù)組進行同樣的操作。
function quick_sort($arr) { $count = count($arr); if(1 >= $count) { return arr; } $base_num = $arr[0]; //選擇標(biāo)的 $left_array = array();//小于標(biāo)的 $right_array = array();//大于標(biāo)的 for($i = 1; $i < $count; $i++) { if($base_num > $arr[$i]) { $left_array[] = $arr[$i]; } else { $right_array[] = $arr[$i]; } } //再分別對左邊和右邊的數(shù)組,進行相同的排序處理方式 $left_array = quick_sort($left_array); $right_array = quick_sort($right_array); //最終合并 return array_merge($left_array, array($base_num), $right_array); }
二分查找(折半查找)
實現(xiàn)思想:將表中間位置記錄的關(guān)鍵字與查找關(guān)鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、后兩個子表,如果中間位置記 錄的關(guān)鍵字大于查找關(guān)鍵字,則進一步查找前一子表,否則進一步查找后一子表。
function binSearch($arr, $target){ $height = count($arr)-1; $low = 0; while($low <= $height){ $mid = floor(($low+$height)/2);//獲取中間數(shù) //兩值相等,返回 if($arr[$mid] == $target){ return $mid; //元素比目標(biāo)大,查找左部 } elseif ($arr[$mid] < $target){ $low = $mid + 1; //元素比目標(biāo)小,查找右部 } elseif ($arr[$mid] > $target){ $height = $mid - 1; } } return "查找失敗"; }擴展閱讀
PHP 冒泡排序
php實現(xiàn)快速排序
PHP實現(xiàn)各種經(jīng)典算法
PHP常見算法-面試篇
php實現(xiàn)二分查找法
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28156.html
摘要:前端篇收集的前端面試題和答案前端開發(fā)面試題史上最全的前端面試題匯總及答案前端工程師手冊協(xié)議工作原理協(xié)議運行機制的概述協(xié)議篇原理原理解析的工作原理與的區(qū)別理解后端篇年的面試總結(jié)垃圾回收機制面向?qū)ο笤O(shè)計淺談?wù)f清楚是什么和的區(qū)別索引原理及慢查 前端篇 收集的前端面試題和答案 前端開發(fā)面試題 史上最全的web前端面試題匯總及答案 前端工程師手冊 HTTP協(xié)議:工作原理 SSL/TLS協(xié)議運行...
摘要:先說一下面試時的心態(tài),剛?cè)腴T的程序員,技術(shù)實力不高,又大多不善言談,面試一旦遇到難題,很容易心態(tài)失衡驚慌失措語無倫次,最終丟掉了。其實大可不必,心態(tài)坦然,是面試必備的一點。 本書的 GitHub 地址:https://github.com/todayqq/PH... 作為一位程序員,面試過多次,也面試過很多人,最近又在找工作,總結(jié)一下面試經(jīng)驗和面試題,希望可以幫到正在找工作的小伙伴們...
摘要:地址每次面試多多少少都會被問到等等之類協(xié)議,協(xié)議相關(guān)的問題也可以說是面試必備,所以我把這些知識單獨收集成了一篇文章。即標(biāo)志位和標(biāo)志位均為。發(fā)送完畢后,服務(wù)器端進入狀態(tài)。認證服務(wù)器對客戶端進行認證以后,確認無誤,同意發(fā)放令牌。 Git 地址:https://github.com/todayqq/PH... 每次面試多多少少都會被問到 HTTP、HTTPS、TCP、Socket、 OAu...
摘要:本書的地址篇收集了一些常見的基礎(chǔ)進階面試題,基礎(chǔ)的面試題不再作答。如何實現(xiàn)持久化持久化,將在內(nèi)存中的的狀態(tài)保存到硬盤中,相當(dāng)于備份數(shù)據(jù)庫狀態(tài)。相當(dāng)于備份數(shù)據(jù)庫接收到的命令,所有被寫入的命令都是以的協(xié)議格式來保存的。 本書的 GitHub 地址:https://github.com/todayqq/PH... PHP 篇收集了一些常見的基礎(chǔ)、進階面試題,基礎(chǔ)的面試題不再作答。 基礎(chǔ)篇 ...
摘要:擴展閱讀收集的前端面試題和答案前端開發(fā)面試題史上最全的前端面試題匯總及答案前端工程師手冊協(xié)議工作原理協(xié)議運行機制的概述 本書的 GitHub 地址:https://github.com/todayqq/PH... 對于大公司,很少會有全棧工程師這個崗位,全棧是個花哨的詞,對于現(xiàn)在比較熱門的技術(shù),不論是 Vue 還是 Laravel,只要智商不差,看著文檔,都能寫出一個 CURD 來,...
閱讀 1230·2019-08-30 15:55
閱讀 981·2019-08-30 15:55
閱讀 2185·2019-08-30 15:44
閱讀 2954·2019-08-29 14:17
閱讀 1162·2019-08-29 12:45
閱讀 3337·2019-08-26 10:48
閱讀 3162·2019-08-23 18:18
閱讀 2631·2019-08-23 16:47