冒泡排序,快速排序,二分查找,虽然简单,但是一段时间不用的话就很容易忘记,这里是小编找来的用PHP实现代码,分享给大家一起来学习一下。
排序
冒泡排序
每一次冒出一个最大的值function bubbleSort($arr)
{
$count = count($arr);
if ($count == 0) return false;
for ($i = 0; $i < $count - 1; $i ) {
for ($k = 0; $k < $count - 1 - $i; $k ) {
if ($arr[$k] < $arr[$k 1]) {
$tmp = $arr[$k];
$arr[$k] = $arr[$k 1];
$arr[$k 1] = $tmp;
}
}
}
return $arr;
}
快速排序
选择一个值作为基准,比他小的放在左边,比他大的放在右边,然后对左右递归,最后合并function quickSort($arr)
{
$count = count($arr);
if ($count <= 1) return $arr;
$base = $arr[0];
$left = $right = [];
for ($i = 1; $i < $count; $i ) {
if ($arr[$i] < $base) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
$left = quickSort($left);
$right = quickSort($right);
return array_merge($left, [$base], $right);
}
选择排序
选择一个值假设为最小,然后依次比较,发现比他小的就互换位置function selectSort($arr)
{
$count = count($arr);
if ($count <= 1) return $arr;
for ($i = 0; $i < $count; $i ) {
//假设最小值位置
$p = $i;
//用假设的最小值$arr[$p]轮流比较,发现比他小的就互换
for ($j = $i 1; $j < $count; $j ) {
if ($arr[$p] > $arr[$j]) {
$p = $j;
}
}
if ($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
return $arr;
}
查找
二分查找
二分查找必须是一个排序好的数组,每次拿数组中间位置的值与目标进行比较function binarySearch(array $arr, $target)
{
$low = 0;
$high = count($arr) - 1;
while ($low <= $high) {
$middle = floor(($high $low) / 2);
if ( $arr[$middle] == $target ) {
return $middle;
} elseif ( $arr[$middle] < $target ) {
$low = $middle 1;
} else {
$high = $middle - 1;
}
}
return false;
}
推荐教程:PHP视频教程