排序算法:
- 冒泡排序
- 选择排序
- 直插入排序
- 希尔排序
- 堆排序
- 归并排序
- 快速排序
归并排序:
稳定,时间复杂度为O(nlogn) ~ O(nlogn) ,空间复杂度为O(n),是比快排稳定的排序算法
function mergeSort($arr){
$size = sizeof($arr);
if ($size <= 1){
return $arr;
}
$left_arr = $right_arr = [];
$bin = floor($size/2);
$left_arr = array_slice($arr, 0,$bin);
$right_arr = array_slice($arr, $bin);
$left_arr = mergeSort($left_arr);
$right_arr = mergeSort($right_arr);
while($left_arr && $right_arr){
$arrC[] = $left_arr[0] > $right_arr[0] ? array_shift($right_arr) : array_shift($left_arr);
}
return array_merge($arrC,$left_arr,$right_arr);
}
排序算法比较
排序方法 | 平均情况 | 最好情况 | 最坏情况 | 辅助空间 | 稳定性 |
---|---|---|---|---|---|
冒泡排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 |
选择排序 | O(n^2) | O(n^2) | O(n^2) | O(1) | 稳定 |
插入排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 |
希尔排序 | O(nlogn)~O(n^2) | O(n^1.3) | O(n^2) | O(1) | 不稳定 |
堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不稳定 |
归并排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 稳定 |
快速排序 | O(nlogn) | O(nlogn) | O(n^2) | O(logn)~O(n) | 不稳定 |