快速排序PHP排序代码
function quickSort($arr)
{
$len = count($arr);
if ($len <= 1) {
return $arr;
}
$base = $arr[0];
$left = $right = [];
for ($i = 1; $i < $len; $i++) {
if ($arr[$i] <= $base) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
$left = quickSort($left);
$right = quickSort($right);
return array_merge($left, [$base], $right);
}
快速排序的缺点:不稳定。
当待排序待数组中存在A、B两个相同的值时,排序之前A在B的前面,排序之后B可能会排在A的前面。
最优的情况:每次选择的$base刚好可以平分数组,此时时间复杂度为O(nlogn)
最坏情况:每次选择的$base刚好是最大值或者最小值,此时时间复杂度为O(n2)
二分法查找的PHP实现代码
function binarySearch($arr, $target)
{
$len = count($arr);
if ($len < 1) {
return false;
}
$low = 0;
$high = $len - 1;
while ($low <= $high) {
var_dump($low);
var_dump($high);
$mid = (int)(($high - $low) / 2 + $low);
var_dump($mid);
if ($target > $arr[$mid]) {
$low = $mid+1;
} else if ($target < $arr[$mid]) {
$high = $mid-1;
} else {
return $mid;
}
}
return $mid-1;
}
var_dump(binarySearch([1, 2, 4, 5, 8, 43, 54, 65, 76, 87, 98, 123], 5));
二分法查找的缺点:如果查找的值在待查找的数组中存在多个,那返回的只有一个值。
今天发现一个在线调试代码的地址,分享给大家http://tool.lu/