一些常见的时间复杂度(小 --> 大) O(1) O(log2n) O(n) O(nlog2n) O(n^2) O(n^3) O(2^n) O(n!) O(n^n) 这四个排序时间复杂度 都是 O(n^2) 空间复杂度 快速排序 log2n - O(n) 冒泡 选择 插入 O(1)
/**
* @param $arr
* @return mixed
* 选择排序
*/
function num_sort($arr){
$count = count($arr);
if($count <= 1) return $arr;
for($i=0;$i<$count;$i++){
$key = $i;
for($j=$i+1;$j<$count;$j++){
if($arr[$key]>$arr[$j]){
$key = $j;
}
}
if($key != $i){
$num = $arr[$i];
$arr[$i] = $arr[$key];
$arr[$key] = $num;
}
}
return $arr;
}
/**
* @param $arr
* @return mixed
* 冒泡排序
*/
function num_sort2($arr){
$count = count($arr);
if($count <= 1) return $arr;
for($i=0;$i<$count;$i++){
for($j=0;$j<$count-1-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$num = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $num;
}
}
}
return $arr;
}
/**
* @param $arr
* @return mixed
* 插入排序
*/
function num_sort3($arr){
$count = count($arr);
if($count <= 1) return $arr;
for($i=1;$i<$count;$i++){
for($j=$i-1;$j>=0;$j--){
if($arr[$j+1]<$arr[$j]){
$num = $arr[$j+1];
$arr[$j+1] = $arr[$j];
$arr[$j] = $num;
}
}
}
return $arr;
}
/**
* @param $arr
* @return array
* 快速排序
*/
function num_sort4($arr){
$count = count($arr);
if($count <= 1) return $arr;
$left_arr = [];
$right_arr = [];
for($i=1;$i<$count;$i++){
if($arr[$i]<$arr[0]){
$left_arr[] = $arr[$i];
}else{
$right_arr[] = $arr[$i];
}
}
$left_arr = num_sort4($left_arr);
$right_arr = num_sort4($right_arr);
$new_arr = array_merge($left_arr,[$arr[0]],$right_arr);
return $new_arr;
}
$arr = [9,8,10,3,7,26,8];
print_r(num_sort4($arr));