2018 php 面試
阿新 • • 發佈:2018-09-30
count 數組長度 取數 使用 array 二分 bubble 長度 return
排序算法
快速排序
快速排序是十分常用的高效率的算法,其思想是:先選一個標尺,用它把整個隊列過一遍篩選,以保證左邊的元素都不大於它,其右邊都不小於它
function quickSort($arr){ //獲取數組長度 $length = count($arr); //判斷長度是否需要繼續二分比較 if($length <= 1){ return $arr } // 定義基準元素 $base = $arr[0]; //定義兩個空數組,用於存放和基準元素比較後的結果 $left = []; $right = []; //遍歷數組 for ($i=1;$i<$length;i++){ //和基準元素作比較 if ($arr[i] >$base){ $right[] = $arr[$i]; }else{ $left[] = $arr[$i]; } } //然後遞歸分別處理left和right $left = quickSort($left); $right = quickSort($right); //合並 return array_merge($left,[$base],$right) }
冒泡排序
思路:法如其名,就像冒泡一樣,每次從數組中冒出一個最大的數。
比如:2,4,1
第一次冒出4:2,1,4
第二次冒出2:1,2,4
function bubbleSort($arr){ // 獲取數組長度 $length = count($arr); // 第一層循環控制冒泡輪次 for($i=0; $i < $length-1; $i++) { // 內層循環控制從第0個鍵值和後一個鍵值比較,每次冒出一個最大的數 for($k=0; $k < $length-$i; $k++) { if($arr[$k] > $arr[$k+1]){ $tmp = $arr[$k+1]; $arr[$k+1] = $arr[$k]; $arr[$k] = $tmp; } } } return $arr; }
選擇排序
思路:每次選擇一個相應的元素,然後將其放到指定的位置
function selectSort($arr){ //實現思路 //雙重循環完成,外層控制輪數,當前的最小值,內層控制比較次數 //獲取長度 $length = count($arr); for($i=0;$i<$length-1;$i++){ //假設最小值的位置 $p = $i; //使用假設的最小值和其他值比較,找到當前的最小值 for ($j=$i+1;$j<$length;$j++){ //$arr[$p] 是已知的當前最小值 //判斷當前循環值和已知最小值的比較,當發下最小的值時記錄下鍵,並進行下一次比較 if($arr[$p]>$arr[$j]){ $p = $j;//比假設的值更小 } } //通過內部for循環找到了當前最小值的key,並保存在$p中 //判斷日光當前$p中的鍵和假設的最小值的鍵不一致增將其互換 if ($p !=$i){ $tmp = $arr[$p]; $arr[$p] = $arr[$i]; $arr[$i] = $tmp } } //返回最終結果 return $arr }
2018 php 面試