码迷,mamicode.com
首页 > 编程语言 > 详细

php常用排序算法

时间:2018-02-25 20:36:58      阅读:242      评论:0      收藏:0      [点我收藏+]

标签: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常用排序算法

标签:tps   class   tox   search   gpo   时间复杂度   for   结果   长度   

原文地址:https://www.cnblogs.com/zilixiang/p/8470155.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!