php算法 快速排序 選擇算法 冒泡算法

 

順序依次爲  快速排序  --》選擇排序 ---》冒泡算法 

個人實例很好理解  由於前幾天面試看了下別人寫的 網上搜的 總以爲不怎麼樣,因此本身寫了下整理了下php

1. 快速排序

 
<?php
//快速排序是個十分有效的高效率算法,
//其思想是先選一個標尺,用它把整個隊列過一遍篩選,以保證其餘
//左邊的元素都不大於大,其餘右邊的元素都不小於它

$arr = array(19,8,17,16,5);
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);
}
$arr = quickSort($arr);
print_r($arr);

 

2. 選擇排序

下標

② 使用右側的,能取到最大下標)比較:找到更小值,則交換位置面試

⑤ 全部比較結束,則返回數組算法

 

<?php
$arr = array(19,8,17,16,5);

echo "<pre>";
//未排序以前
print_r($arr);
echo  "</pre>";
echo  "<hr>";

//選擇排序  升序
function select($arr){
   //計算下標的範圍
   $n = count($arr);
    //最大的下標是$n-1; 

   //假設最小值(左側,下標比較小的)與剩下的元素(右側的元素,比假設的最小值下標至少大1)的逐一比較
   for($i=0;$i<$n-1;$i++){
      //假設一個元素爲最小值
      $index = $i;

      for($j=$i+1;$j<$n;$j++){
         if($arr[$index]>$arr[$j]){
            //index 的值被覆蓋
            //已知的最小值與剩下的元素比較
            $index = $j;
         }
      }

      //以上的for循環執行完畢,至關於本趟執行完
      //找到了一個最小值
      
      //假設的最小值$arr[$i]
      //與找到的最小值交換位置$arr[$index]
      $tem = $arr[$i]; //初始假設的最小值
      $arr[$i] = $arr[$index]; //真正的最小值 $Index 不能夠使用  (內層for循環執行完,此刻$j 爲$len-1)
      $arr[$index] = $tem;
   }
   return $arr;
}
$arr = select($arr);
print_r($arr);

3. 冒泡算法排序

<?php
$arr = array(19,8,17,16,5);

echo "<pre>";
//未排序以前
print_r($arr);
echo  "</pre>";
echo  "<hr>";

/**
 * 冒泡排序,較大的泡泡排在上面,對應的數組中,爲較大的元素放在數組的末尾,沒糖循環中,經過兩兩比較,將較大的元素放在右側
 *
 * 第幾輪  外層循環的次數,數組的長度-1;
 * 內層循環:比較次數,長度-1-第幾輪
 * @var [type]
 */
$n = count($arr);
//for 外層循環
for ($i=0; $i <$n-1 ; $i++) {
    //內層循環,每一步比上一次少一次比較
    for ($j=0; $j <$n-1-$i ; $j++) {
        if($arr[$j]>$arr[$j+1]){
            $tem = $arr[$j];
            $arr[$j] = $arr[$j+1];
            $arr[$j+1] = $tem;
        }
    }
}

echo "<pre>";
//   冒泡排序以後
print_r($arr);
echo  "</pre>";
echo  "<hr>"; 
相關文章
相關標籤/搜索