本書的 GitHub 地址: https://github.com/todayqq/PH...
算法能夠說是大廠的必考題,對於算法,必定要理解其中的精髓、原理。php
冒泡排序的原理:一組數據,比較相鄰數據的大小,將值小數據在前面,值大的數據放在後面。html
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; }
這樣的一個數組 array(6, 3, 8, 2, 9, 1)
,排序過程是怎樣的?細節問題不在過多論述,有興趣能夠從擴展閱讀中尋找答案。git
快速排序是對冒泡排序的一種改進。github
實現思想是:經過一趟排序將待排記錄分割成獨立的兩部分,其中一部分的關鍵字均比另外一部分記錄的關鍵字小,則可分別對這兩部分記錄繼續進行快速排序,整個排序過程能夠遞歸進行,以達到整個序列有序的目的。面試
簡單來講就是:找到當前數組中的任意一個元素(通常選擇第一個元素),做爲標的,新建兩個空數組,遍歷整個數組元素,若是遍歷到的元素比當前的元素要小,那麼就放到左邊的數組,不然放到右面的數組,而後再對新數組進行一樣的操做。算法
function quick_sort($arr) { $count = count($arr); if(1 >= $count) { return arr; } $base_num = $arr[0]; //選擇標的 $left_array = array();//小於標的 $right_array = array();//大於標的 for($i = 1; $i < $count; $i++) { if($base_num > $arr[$i]) { $left_array[] = $arr[$i]; } else { $right_array[] = $arr[$i]; } } //再分別對左邊和右邊的數組,進行相同的排序處理方式 $left_array = quick_sort($left_array); $right_array = quick_sort($right_array); //最終合併 return array_merge($left_array, array($base_num), $right_array); }
實現思想:將表中間位置記錄的關鍵字與查找關鍵字比較,若是二者相等,則查找成功;不然利用中間位置記錄將表分紅前、後兩個子表,若是中間位置記 錄的關鍵字大於查找關鍵字,則進一步查找前一子表,不然進一步查找後一子表。數組
function binSearch($arr, $target){ $height = count($arr)-1; $low = 0; while($low <= $height){ $mid = floor(($low+$height)/2);//獲取中間數 //兩值相等,返回 if($arr[$mid] == $target){ return $mid; //元素比目標大,查找左部 } elseif ($arr[$mid] < $target){ $low = $mid + 1; //元素比目標小,查找右部 } elseif ($arr[$mid] > $target){ $height = $mid - 1; } } return "查找失敗"; }