下面分享一些最常见的算法,用PHP如何实现。
1、冒泡排序
// blog.phpha.com
function bubbleSort(array $arr): array
{
$n = count($arr);
for ($i = 0; $i < $n - 1; $i++) {
for ($j = $i + 1; $j < $n; $j++) {
if ($arr[$j] < $arr[$i]) {
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
}
return $arr;
}
// blog.phpha.com
2、归并排序
// blog.phpha.com
function merge(array &$arr, int $left, int $mid, int $right): void
{
$i = $left;
$j = $mid + 1;
$k = 0;
$temp = [];
while ($i <= $mid && $j <= $right) {
if ($arr[$i] <= $arr[$j]) {
$temp[$k++] = $arr[$i++];
} else {
$temp[$k++] = $arr[$j++];
}
}
while ($i <= $mid) {
$temp[$k++] = $arr[$i++];
}
while ($j <= $right) {
$temp[$k++] = $arr[$j++];
}
for ($i = $left, $j = 0; $i <= $right; $i++, $j++) {
$arr[$i] = $temp[$j];
}
}
function mergeSort(array &$arr, int $left, int $right): void
{
if ($left < $right) {
$mid = floor(($left + $right) / 2);
mergeSort($arr, $left, $mid);
mergeSort($arr, $mid + 1, $right);
merge($arr, $left, $mid, $right);
}
}
// blog.phpha.com
3、二分查找-递归
// blog.phpha.com
function binSearch(array $arr, int $low, int $high, mixed $value): int|false
{
if ($low > $high) {
return false;
}
$mid = floor(($low + $high) / 2);
if ($value == $arr[$mid]) {
return $mid;
} elseif ($value < $arr[$mid]) {
return binSearch($arr, $low, $mid - 1, $value);
} else {
return binSearch($arr, $mid + 1, $high, $value);
}
}
// blog.phpha.com
4. 二分查找-非递归
// blog.phpha.com
function binSearch(array $arr, int $low, int $high, mixed $value): int|false
{
while ($low <= $high) {
$mid = floor(($low + $high) / 2);
if ($value == $arr[$mid]) {
return $mid;
} elseif ($value < $arr[$mid]) {
$high = $mid - 1;
} else {
$low = $mid + 1;
}
}
return false;
}
// blog.phpha.com
5、快速排序
// blog.phpha.com
function quickSort(array $arr): array
{
$n = count($arr);
if ($n <= 1) {
return $arr;
}
$key = $arr[0];
$leftArr = [];
$rightArr = [];
for ($i = 1; $i < $n; $i++) {
if ($arr[$i] <= $key) {
$leftArr[] = $arr[$i];
} else {
$rightArr[] = $arr[$i];
}
}
$leftArr = quickSort($leftArr);
$rightArr = quickSort($rightArr);
return array_merge($leftArr, [$key], $rightArr);
}
// blog.phpha.com
6、选择排序
// blog.phpha.com
function selectSort(array $arr): array
{
$n = count($arr);
for ($i = 0; $i < $n; $i++) {
$k = $i;
for ($j = $i + 1; $j < $n; $j++) {
if ($arr[$j] < $arr[$k]) {
$k = $j;
}
}
if ($k != $i) {
$temp = $arr[$i];
$arr[$i] = $arr[$k];
$arr[$k] = $temp;
}
}
return $arr;
}
// blog.phpha.com
7、插入排序
// blog.phpha.com
function insertSort(array $arr): array
{
$n = count($arr);
for ($i = 1; $i < $n; $i++) {
$tmp = $arr[$i];
$j = $i - 1;
while ($j >= 0 && $arr[$j] > $tmp) {
$arr[$j + 1] = $arr[$j];
$arr[$j] = $tmp;
$j--;
}
}
return $arr;
}
// blog.phpha.com