几大排序算法PHP实现
Posted cfyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了几大排序算法PHP实现相关的知识,希望对你有一定的参考价值。
1 function swap(&$arr, $a, $b){ 2 $temp = $arr[$a]; 3 $arr[$a] = $arr[$b]; 4 $arr[$b] = $temp; 5 } 6 -------------------冒泡排序------------------------------------------- 7 //沉底法 8 function bubbleSort($arr){ 9 $flag = true; 10 $len = count($arr); 11 for($i=0; $i<$len-1 && $flag; $i++){ 12 $flag = false; 13 for($j=0; $j<$len-$i-1; $j++){ 14 if($arr[$j] > $arr[$j+1]){ 15 swap($arr, $j, $j+1); 16 $flag = true; 17 } 18 } 19 } 20 return $arr; 21 } 22 23 //冒泡法 24 function bubbleSort2($arr){ 25 $flag = true; 26 $len = count($arr); 27 for($i=0; $i<$len-1 && $flag; $i++){ 28 $flag = false; 29 for($j=$len-1; $j>$i; $j--){ 30 if($arr[$j-1] > $arr[$j]){ 31 swap($arr, $j-1, $j); 32 $flag = true; 33 } 34 } 35 } 36 return $arr; 37 } 38 39 时间复杂度:O(n^2) 40 空间复杂度:O(1) 41 稳定性:稳定排序 42 43 ----------------------选择排序------------------------------------------------ 44 45 function selectSort($arr){ 46 $len = count($arr); 47 for($i=0; $i<$len-1; $i++){ 48 $min = $i; 49 for($j=$i+1; $j<$len; $j++){ 50 if($arr[$j] < $arr[$min]){ 51 $min = $j; 52 } 53 } 54 if($min != $i){ 55 swap($arr, $i, $min); 56 } 57 } 58 return $arr; 59 } 60 61 时间复杂度:O(n^2) 62 空间复杂度:O(1) 63 稳定性:不稳定排序 64 65 -----------------------插入排序------------------------------------------------- 66 67 function InsertSort($arr){ 68 $len = count($arr); 69 for($i=1; $i<$len; $i++){ 70 if($arr[$i] < $arr[$i-1]){ 71 $insertVal = $arr[$i]; 72 for($j=$i-1; $j>=0 && $arr[$j] > $insertVal; $j--){ 73 $arr[$j+1] = $arr[$j]; 74 } 75 $arr[$j+1] = $insertVal; 76 } 77 } 78 return $arr; 79 } 80 81 时间复杂度:O(n^2) 82 空间复杂度:O(1) 83 稳定性:稳定排序 84 85 ------------------------快速排序------------------------------------------------- 86 87 function quickSort(&$arr, $l=0, $r){ 88 $len = count($arr); 89 if(!is_array($arr) || $len <= 1) { 90 return $arr; 91 } 92 if($l < $r){ 93 $i = $l; 94 $j = $r; 95 $baseVal = $arr[$l]; 96 while($i < $j){ 97 while($i<$j && $arr[$j] > $baseVal){ 98 $j--; 99 } 100 if($i < $j) 101 $arr[$i++] = $arr[$j]; 102 while($i<$j && $arr[$i] < $baseVal){ 103 $i++; 104 } 105 if($i < $j) 106 $arr[$j--] = $arr[$i]; 107 } 108 $arr[$i] = $baseVal; 109 quickSort($arr, $l, $i-1); 110 quickSort($arr, $i+1, $r); 111 return $arr; 112 } 113 } 114 115 function quickSort2($arr){ 116 $arrL = $arrR = []; 117 $len = count($arr); 118 if(!is_array($arr) || $len <= 1) { 119 return $arr; 120 } 121 $baseVal = $arr[0]; 122 for($i=1; $i<$len; $i++){ 123 if($arr[$i] <= $baseVal){ 124 $arrL[] = $arr[$i]; 125 }elseif($arr[$i] > $baseVal){ 126 $arrR[] = $arr[$i]; 127 } 128 } 129 $arrL = quickSort2($arrL); 130 $arrR = quickSort2($arrR); 131 return array_merge($arrL, [$baseVal], $arrR); 132 } 133 时间复杂度:O(nlogn) 134 空间复杂度:O(1) 135 稳定性:不稳定排序
以上是关于几大排序算法PHP实现的主要内容,如果未能解决你的问题,请参考以下文章