几大排序算法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 稳定性:不稳定排序 

 

posted @ 2020-02-13 17:27  cfYu  阅读(138)  评论(0编辑  收藏  举报