记录学习的一些内容,希望和大家分享一下,互相学习~~
## 一、冒泡排序法
(1)PHP实现
<?php
/**
* 冒泡算法(升序)
* @param [type] $arr [description]
* @return [type] [description]
*/
function arrSort($arr)
{
if(empty($arr)) {
return $arr;
}
$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];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
}
}
}
return $arr;
}
$arr = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
$arr = arrSort($arr);
var_dump($arr);
exit;
## 二、选择排序法
(1)PHP实现
<?php
/**
* 选择排序(升序)
* @param [type] $arr [description]
* @return [type] [description]
*/
function arrSort($arr)
{
if(empty($arr)) {
return $arr;
}
$len = count($arr);
for($i = 0; $i < $len - 1; $i++) {
$p = $i;
for ($j = $i + 1; $j < $len; $j++) {
if($arr[$p] > $arr[$j]) {
$p = $j;
}
}
if($p != $i) {
$tmp = $arr[$i];
$arr[$i] = $arr[$p];
$arr[$p] = $tmp;
}
}
return $arr;
}
$arr = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
$arr = arrSort($arr);
var_dump($arr);
exit;
## 三、插入排序法
(1)PHP实现
<?php
/**
* 插入排序(升序排列)
* @param [type] $arr [description]
* @return [type] [description]
*/
function arrSort($arr)
{
if(empty($arr)) {
return $arr;
}
$len = count($arr);
for($i = 1; $i < $len; $i++) {
$current = $arr[$i];
$pIndex = $i - 1;
while($pIndex >= 0 && $arr[$pIndex] > $current) {
$arr[$pIndex+1] = $arr[$pIndex];
$pIndex--;
}
$arr[$pIndex+1] = $current;
}
return $arr;
}
$arr = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
$arr = arrSort($arr);
var_dump($arr);
exit;
## 四、快速排序法
(1)PHP实现
<?php
/**
* 快速排序(升序)
* @param [type] $arr [description]
* @return [type] [description]
*/
function arrSort($arr)
{
$len = count($arr);
// 递归结束条件
if($len <= 1) {
return $arr;
}
$base = $arr[0];
$leftArray = [];
$rightArray = [];
for ($i = 1; $i < $len; $i++) {
if($arr[$i] < $base) {
$leftArray[] = $arr[$i];
} else {
$rightArray[] = $arr[$i];
}
}
$leftArray = arrSort($leftArray);
$rightArray = arrSort($rightArray);
return array_merge($leftArray, [$base], $rightArray);
}
$arr = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
$arr = arrSort($arr);
var_dump($arr);
exit;
## 五、归并排序
(1)PHP实现
<?php
/**
* 排序
* @param [type] $left [description]
* @param [type] $right [description]
* @return [type] [description]
*/
function arrMerge($left, $right)
{
$result = [];
while(count($left) > 0 && count($right) > 0) {
$result[] = $left[0] < $right[0] ? array_shift($left) : array_shift($right);
}
while (count($left)) {
$result[] = array_shift($left);
}
while(count($right)) {
$result = array_shift($right);
}
return $result;
}
/**
* 归并排序
* @param [type] $arr [description]
* @return [type] [description]
*/
function arrSort($arr)
{
$len = count($arr);
if ($len < 2) {
return $arr;
}
$middle = floor($len / 2);
$left = array_slice($arr, 0, $middle);
$right = array_slice($arr, $middle);
return arrMerge(arrSort($left), arrSort($right));
}
$arr = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
$arr = arrSort($arr);
var_dump($arr);
exit;
PS:参考博客https://www.cnblogs.com/onepixel/articles/7674659.html