PHP數組基本排序演算法和尋找演算法

來源:互聯網
上載者:User

標籤:有序   基本   middle   style   ddl   shu   儲存   尋找   條件   

關於PHP中的基礎演算法,小結一下,也算是本部落格的第一篇文章

1.2種排序演算法
冒泡排序:
例子:個人見解
5 6 2 3 7 9第一趟5 6 2 3 7 95 2 6 3 7 95 2 3 6 7 95 2 3 6 7 95 2 3 6 7  9第二趟2 5 3 6 7  92 3 5 6 7  92 3 5 6 7  92 3 5 6  7  9第三趟2 3 5 6  7  92 3 5 6  7  92 3 5  6  7  9第四趟2 3 5  6  7  92 3  5  6  7  9第五趟     2  3  5  6  7  9 

    兩兩比較,每一趟中都會確定出最大的數然後放在右邊,冒泡速度較慢,但是比較穩定。

 代碼方面主要是嵌套的for迴圈

 代碼:

 1 #冒泡排序 2 #原理兩兩比較,大的放右邊,每次迴圈會排出一個最大的放在右邊 3 function maopao($arr){ 4     $len=count($arr); 5     for ($i=0; $i < $len-1; $i++) {  6         for ($a=0; $a <$len-1-$i ; $a++) {  7             if ($arr[$a]>$arr[$a+1]) { 8                 $t=$arr[$a]; 9                 $arr[$a]=$arr[$a+1];10                 $arr[$a+1]=$t;11             }12         }13     }14     return $arr;15 16 }17 $arr=[5,6,8,1,2,3,7,55,69,23,11];18 var_dump(maopao($arr));

 

選擇排序:
例子:個人見解
#選擇排序8 5 6 2 4 7第一趟5 8 6 2 4 75 8 6 2 4 72 8 6 5 4 72 8 6 5 4 72  8 6 5 4 7第二趟2  6 8 5 4 72  5 8 6 4 72  4 8 6 5 72  4  8 6 5 7第三趟2  4  6 8 5 72  4  5 8 6 72  4  5  8 6 7第四趟2  4  5  6 8 72  4  5  6  8 7第五趟2  4  5  6  7  8

假設數組中靠左的元素是小的,然後跟右邊的元素比較,如果左邊的大於右邊的就換到左邊,每趟都能確定出一個最小值,缺點在於不穩定性,速度快於冒泡排序。
代碼:
 1 #選擇排序 2 #那最左邊的和右邊比較如果大於就換到右邊,每趟確定出一個最小值 3 function xuanze($arr){ 4     $len=count($arr); 5     for ($i=0; $i <$len-1 ; $i++) {  6         //假設當前最左邊的元素是最小值,儲存下標 7         $key=$i; 8         for ($j=$i+1; $j < $len; $j++) {  9             //如果左邊的大於右邊的就儲存下標10             if($arr[$key]>$arr[$j]){11                 $key=$j;12             }13         }14         //找到最小的值,交換下標15         $temp=$arr[$key];16         $arr[$key]=$arr[$i];17         $arr[$i]=$temp;18     }19     return $arr;20 }21 $arr=[11,2,3,55,66,99];22 var_dump(xuanze($arr));

關於排序先寫兩個,日後跟新~~

1.2種尋找演算法
順序尋找:
這個比較簡單,原理就是從第一個開始比較直到找到,效率比較低,較穩定。
代碼:
#選擇排序#存在值返回該值的下標,不存在返回falsefunction shunxu($arr,$target){    $len=count($arr);    for ($i=0; $i <$len ; $i++) {         if ($arr[$i]==$target) {            return $i;        }    }    return false;}$arr=[2,5,6,3,8,52,6];var_dump(shunxu($arr,52));
二分法尋找
條件嚴格,數組必須有序排列,效率較高。
原理:取一個中間值進行和要尋找的值比較,假如數組升序排序,值大於要尋找的值,然後下標減一

#二分法尋找#選擇升序數組function erfen($arr,$target){    $len=count($arr)-1;    $middle=ceil($len/2);    if ($arr[$middle]==$target) {        return true;    }elseif($arr[$middle]>$target){        for ($i=0; $i <$middle ; $i++) {         if ($arr[$i]==$target) {            return true;        }    }  }else{      //因為迴圈的是長度所以得+1      for ($i=$middle; $i < $len+1 ; $i++) {         if ($arr[$i]==$target) {            return true;        }    }  }  return false;}$arr=[1,2,3,4,5,6,7,10,11];var_dump(erfen($arr,11));

先寫這幾個吧,日後在更!

 

 

 

PHP數組基本排序演算法和尋找演算法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.