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 稳定性:不稳定排序