1. 程式人生 > >2018 php 面試

2018 php 面試

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 面試