冒泡算法
<?php
function bubble_sort($array)
{
$len = count($array);
$swag = false;
for ($j = 0; $j < $len; $i++) {
for ($j = 1; $j < $len - $i; $j++) {
if ($array[$j-1] > $array[$j]) {
[$array[$j-1], $array[$j]] = [$array[$j], $array[$j-1]];
$swag = true;
}
}
if ($swag === false) {
break;
}
}
return $array;
}
归并排序
<?php
function merge_sort($a)
{
$n = count($arr);
return merge_sort_c($a, 0, $n-1);
}
function merge_sort_c($a, $left, $right)
{
if ($left >= $right) {
return [$a[$right]];
}
$mid = floor(($left + $right) / 2);
$left = merge_sort_c($a, $left, $mid);
$right = merge_sort_c($a, $mid+1, $right);
return merge($left, $right);
}
function merge($left, $right)
{
$i = 0; $j = 0;
$tmp = [];
while (isset($left[$i]) && isset($right[$j])) {
If ($left[$i] < $right[$j]) {
$tmp[] = $left[$i];
$i++;
} else {
$tmp[] = $right[$j];
$j++;
}
}
while (isset($left[$i]) {
$tmp[] = $left[$i];
$i++;
}
while (isset($right[$j])) {
$tmp[] = $right[$j];
$j++;
}
return $tmp;
}
快速排序
<?php
function quick_sort($a)
{
quick_sort_c($a, 0, $n—1);
}
function quick_sort_c(&$a, $left, $right)
{
if ($left >= $right) {
return;
}
$partition = partition($a, $left, $right);
quick_sort_c($a, $left, $partition-1);
quick_sort_c($a, $partition+1, $right);
}
function partition(&$a, $left, $right)
{
$p = $a[$right];
$j = $left;
for ($i = $left; $i < $right; $i++) {
If ($a[$i] < $p) {
[$a[j], $a[$i]] = [$a[$i], $a[$j]];
$j++;
}
}
[$a[$j], $a[$right]] = [$a[$right], $a[$j]];
return $j;
}
二分查找
<?php
function binary_search($a, $v)
{
$n = count($a);
return binary_search_c($a, 0, $n - 1, $v);
}
function binary_search_c($a, $low, $hight, $v)
{
If ($low > $hight) {
return false;
}
$mid = floor(($low + $hight) / 2);
if ($a[$mid] > $v) {
return binary_search_c($a, $mid + 1, $hight, $v);
} else if ($a[$mid] < $v) {
return binary_search_c($a, $low, $mid - 1, $v);
} else {
return $mid;
}
}
function binary_search_u($a, $v)
{
$low = 0;
$hight = count($a);
If ($hight == 0) {
return -1;
}
while ($low <= $hight) {
$mid = floor(($low + $hight) / 2);
If ($a[$mid] > $v) {
$hight = $mid - 1;
} else if ($a[$mid] < $v) {
$low = $mid + 1;
} else {
return $mid;
}
}
return -1;
}