几大排序算法PHP实现
function swap(&$arr, $a, $b){
$temp = $arr[$a];
$arr[$a] = $arr[$b];
$arr[$b] = $temp;
}
-------------------冒泡排序-------------------------------------------
//沉底法
function bubbleSort($arr){
$flag = true;
$len = count($arr);
for($i=0; $i<$len-1 && $flag; $i++){
$flag = false;
for($j=0; $j<$len-$i-1; $j++){
if($arr[$j] > $arr[$j+1]){
swap($arr, $j, $j+1);
$flag = true;
}
}
}
return $arr;
}
//冒泡法
function bubbleSort2($arr){
$flag = true;
$len = count($arr);
for($i=0; $i<$len-1 && $flag; $i++){
$flag = false;
for($j=$len-1; $j>$i; $j--){
if($arr[$j-1] > $arr[$j]){
swap($arr, $j-1, $j);
$flag = true;
}
}
}
return $arr;
}
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:稳定排序
----------------------选择排序------------------------------------------------
function selectSort($arr){
$len = count($arr);
for($i=0; $i<$len-1; $i++){
$min = $i;
for($j=$i+1; $j<$len; $j++){
if($arr[$j] < $arr[$min]){
$min = $j;
}
}
if($min != $i){
swap($arr, $i, $min);
}
}
return $arr;
}
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:不稳定排序
-----------------------插入排序-------------------------------------------------
function InsertSort($arr){
$len = count($arr);
for($i=1; $i<$len; $i++){
if($arr[$i] < $arr[$i-1]){
$insertVal = $arr[$i];
for($j=$i-1; $j>=0 && $arr[$j] > $insertVal; $j--){
$arr[$j+1] = $arr[$j];
}
$arr[$j+1] = $insertVal;
}
}
return $arr;
}
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:稳定排序
------------------------快速排序-------------------------------------------------
function quickSort(&$arr, $l=0, $r){
$len = count($arr);
if(!is_array($arr) || $len <= 1) {
return $arr;
}
if($l < $r){
$i = $l;
$j = $r;
$baseVal = $arr[$l];
while($i < $j){
while($i<$j && $arr[$j] > $baseVal){
$j--;
}
if($i < $j)
$arr[$i++] = $arr[$j];
while($i<$j && $arr[$i] < $baseVal){
$i++;
}
if($i < $j)
$arr[$j--] = $arr[$i];
}
$arr[$i] = $baseVal;
quickSort($arr, $l, $i-1);
quickSort($arr, $i+1, $r);
return $arr;
}
}
function quickSort2($arr){
$arrL = $arrR = [];
$len = count($arr);
if(!is_array($arr) || $len <= 1) {
return $arr;
}
$baseVal = $arr[0];
for($i=1; $i<$len; $i++){
if($arr[$i] <= $baseVal){
$arrL[] = $arr[$i];
}elseif($arr[$i] > $baseVal){
$arrR[] = $arr[$i];
}
}
$arrL = quickSort2($arrL);
$arrR = quickSort2($arrR);
return array_merge($arrL, [$baseVal], $arrR);
}
时间复杂度:O(nlogn)
空间复杂度:O(1)
稳定性:不稳定排序 相关推荐
shawsun 2020-07-04
小海 2020-06-25
数据与算法之美 2020-05-27
lixiaotao 2020-10-07
美丽的泡沫 2020-09-08
nongfusanquan0 2020-08-18
hang0 2020-08-16
earthhouge 2020-08-15
算法改变人生 2020-07-28
troysps 2020-07-19
Broadview 2020-07-19
chenfei0 2020-07-18
风吹夏天 2020-07-07
yangjingdong00 2020-07-05
数据与算法之美 2020-07-05