<?php
class SortData {
/**
* @desc: 冒泡排序(升序) 时间复杂度 O(n的平方) 空间复杂度 O(1) 稳定
* @author:dingling
* @date:2020/4/30
*/
public function bubbleSort($arr){
$len = count($arr);
for($i=1;$i<$len;$i++){
for($j=0;$j<$len-$i;$j++){
if( $arr[$j] > $arr[$j+1] ){
$tmp = $arr[$j+1];
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
return $arr;
}
/**
* @desc: 冒泡排序(降序) 时间复杂度 O(n的平方) 空间复杂度 O(1) 稳定
* @author:dingling
* @date:2020/4/30
*/
public function bubbleSort2($arr){
$len = count($arr);
for( $i=1; $i<$len; $i++ ){
for($j=0;$j<$len-$i;$j++){
if( $arr[$j] < $arr[$j+1] ){
$tmp = $arr[$j+1];
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
return $arr;
}
/**
* @desc: 插入排序 时间复杂度 O(n的平方) 空间复杂度 O(1) 稳定
* @author:dingling
* @date:2020/4/30
*/
public function insertSort($arr){
$len = count($arr);
for($i=1;$i<$len;$i++){
$tmp = $arr[$i];
for($j=$i-1;$j>=0;$j--){
if($tmp < $arr[$j]){
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}else{
break;
}
}
}
return $arr;
}
/**
* @desc: 快速排序 时间复杂度 O(nlog2为底n) 空间复杂度 O(nlog2为底n) 不稳定
* @author:dingling
* @date:2020/4/30
*/
public function quickSort($arr){
$len = count($arr);
if($len <= 1){return $arr;}
$base_num = $arr[0];
$left_arr = [];
$right_arr = [];
for( $i=1;$i<$len;$i++ ){
if( $base_num > $arr[$i] ){
$left_arr[] = $arr[$i];
}else{
$right_arr[] = $arr[$i];
}
}
$left_arr = $this->quickSort($left_arr);
$right_arr = $this->quickSort($right_arr);
return array_merge($left_arr,[$base_num],$right_arr);
}
/**
* @desc: 选择排序 时间复杂度 O(n的平方) 空间复杂度 O(1) 不稳定
* @author:dingling
* @date:2020/4/30
*/
public function selectSort($arr){
$len = count($arr);
for($i=0;$i<$len-1;$i++){
$p = $i;
for($j=$i+1;$j<$len;$j++){
if( $arr[$j] < $arr[$p] ){
$p = $j;
}
}
if($p != $i){
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
return $arr;
}
}
$arr = [32,23,54,1,56,32,45,6,8,29];
$obj = new SortData();
$arr2 = $obj->bubbleSort($arr);
var_dump($arr2);
$arr2 = $obj->bubbleSort2($arr);
var_dump($arr2);
$arr2 = $obj->quickSort($arr);
var_dump($arr2);
$arr2 = $obj->insertSort($arr);
var_dump($arr2);
$arr2 = $obj->selectSort($arr);
var_dump($arr2);