<?php
function popSort(&$arr)
{
if (empty($arr) || 1 === count($arr)) {
return;
}
$len = count($arr);
for ($i = 0; $i < $len; ++$i) {
for ($j = 0; $j < $len - $i - 1; ++$j) {
if ($arr[$j] > $arr[$j + 1]) {
$tmp = $arr[$j + 1];
$arr[$j + 1] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
}
function selectSort(&$arr)
{
if (empty($arr) || 1 === count($arr)) {
return;
}
$sort = [];
while (count($arr) > 0) {
$minIndex = 0;
for ($j = 0; $j < count($arr); ++$j) {
if ($arr[$minIndex] >= $arr[$j]) {
$minIndex = $j;
}
}
$tmp = $arr[$minIndex];
// echo $tmp, PHP_EOL;
array_splice($arr, $minIndex, 1);
array_push($sort, $tmp);
}
$arr = $sort;
}
function insertSort($arr)
{
if (empty($arr) || 1 === count($arr)) {
return $arr;
}
$len = count($arr);
$left = [$arr[0]];
for ($i = 1; $i < $len; ++$i) {
$cur = $arr[$i];
for ($j = count($left) - 1; $j >= 0; --$j) {
if ($cur > $left[$j]) {
array_splice($left, $j + 1, 0, $cur);
break;
} else {
if (0 === $j) {
array_unshift($left, $cur);
}
}
}
}
return $left;
}
function quickSort(&$arr, $left, $right)
{
if ($left < $right) {
$i = $left;
$j = $right;
$x = $arr[$left];
while ($i < $j) {
while ($i < $j && $arr[$j] >= $x) {
--$j;
}
if ($i < $j) {
$arr[$i++] = $arr[$j];
}
while ($i < $j && $arr[$i] < $x) {
++$i;
}
if ($i < $j) {
$arr[$j--] = $arr[$i];
}
}
$arr[$i] = $x;
quickSort($arr, $left, $i - 1);
quickSort($arr, $i + 1, $right);
}
}
function binary_search($arr, $number)
{
if (empty($arr)) {
return -1;
}
// 初始变量值
$len = count($arr);
$lower = 0;
$high = $len - 1;
// 最低点比最高点大就退出
while ($lower <= $high) {
// 以中间点作为参照点比较
$middle = floor($lower + ($high - $lower) / 2);
// echo PHP_EOL.$middle.PHP_EOL;
if ($arr[$middle] > $number) {
// 查找数比参照点小,舍去右边
$high = $middle - 1;
} elseif ($arr[$middle] < $number) {
// 查找树比参照点大,舍去左边
$lower = $middle + 1;
} else {
return $middle;
}
}
return -1;
}
// example
$arr = [4, 5, 2, 1, 9];
quickSort($arr, 0, count($arr) - 1);
echo PHP_EOL;
print_r($arr);
echo PHP_EOL;
print_r(binary_search($arr, 9));
一些排序算法
最新推荐文章于 2024-06-14 16:08:27 发布