php常用排序演算法

來源:互聯網
上載者:User

標籤:tps   class   tox   search   gpo   時間複雜度   for   結果   長度   

//二分尋找必須為有序列表  時間複雜度O(log2n)
function halfSearch($arr, $val){
$cnt = count($arr);
$start = 0;
$end = $cnt-1;
while ($start <= $end){
$half = ceil(($start + $end)/2);
if($arr[$half] == $val){
return $half;
}elseif($arr[$half] > $val){
$end = $half - 1;
}elseif ($arr[$half] < $val){
$start = $half + 1;
}
}
return -1;

}
$n = halfSearch([1,3,6,7,8,9,11,15,17,29,30,31,32,33,34,35,44,41,42,43,44,45,46,50], 30);
var_dump($n);

//順序尋找 時間複雜度O(n)
function sortSearch($arr, $val){
$flag = false;
$exist = -2;
foreach ($arr as $k => $v){
if($v == $val){
$flag = true;
break;
}
}

if($flag == false){
return -1;
}else{
return true;
}
}

$n = sortSearch([1,3,6,7,8,9,11,15,17,29,30,31,32,33,34,35,44,41,42,43,44,45,46,50], 30);
var_dump($n);


//冒泡排序 時間複雜度O(n^2)  思路就是一組一組數字(相鄰的兩個數)比較,如果大於後面的數字就發生交換,這樣比較完的結果就是會把最大的數移動到最後的位置
function maoPao($arr){
$cnt = count($arr);
for ($i=0;$i<=($cnt-1);$i++){
$flag = 1;
     //對於一個長度為N的數組,我們需要排序 N-1 輪,每 i 輪 要比較 N-i 次 
for ($j=0;$j<($cnt-1-$i);$j++){
if($arr[$j] > $arr[$j+1]){
$flag = 0;
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
}
}
if($flag){
//證明數組有序 不需要迴圈
break;
}
}
return $arr;
}


$n = maoPao([1,50,2,6,4,3,8,9,12]);
var_dump($n);
//冒泡的第二種思路 這個沒經過實踐  大家可以看看思路 
第一輪交換的過程:拿數組的第一位-2跟5比,發現沒有我小,跳過,拿-2跟3比,發小沒有我小跳過...
拿-2跟-3比的時候,發小比我還小,兩個交換下位置,下次迴圈的時候數組第一位已經發生了變化,是-3。嗯,仔細想想
然後迴圈還沒完,繼續拿數組的第一位(-3),跟數組最後一位-4比較,又交換下位置...
$numbers = array(-2, 5, 3, 1, -3, -4);for ($i=0;$i<count($numbers);$i++) { for ($j=$i+1;$j<count($numbers);$j++) { if ($numbers[$i] > $numbers[$j]) { $tmp = $numbers[$i]; $numbers[$i] = $numbers[$j]; $numbers[$j] = $tmp; } } // var_dump($numbers);}var_dump($numbers);exit;

參考連結: http://www.cnblogs.com/shen-hua/p/5422676.html https://www.cnblogs.com/toxiaonan/archive/2017/11/29/7920757.html






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.