第一种实现,从数组一头便利,平均时间复杂度nlog(n),极端情况下,数组为倒序,此时时间复杂度退化成n2。

 

  1. function quick_sort(&$arr$lower$upper
  2.     if($lower >= $upper
  3.     { 
  4.         return
  5.     } 
  6.  
  7.     $key = $arr[$lower]; 
  8.     $m = $lower
  9.      
  10.     for($i = $lower + 1; $i <= $upper$i++) 
  11.     { 
  12.         if($arr[$i] < $key
  13.         { 
  14.             $m++; 
  15.             $tmp = $arr[$m]; 
  16.             $arr[$m] = $arr[$i]; 
  17.             $arr[$i] = $tmp
  18.         } 
  19.     } 
  20.      
  21.     $tmp = $arr[$m]; 
  22.     $arr[$m] = $arr[$lower]; 
  23.     $arr[$lower] = $tmp
  24.  
  25.     quick_sort($arr$lower$m - 1); 
  26.     quick_sort($arr$m + 1, $upper); 

 

第二种方案,从数组两头开始遍历,时间复杂度在最坏情况下,依然是n2

 

  1. function quick_sort(&$arr$lower$upper
  2.     if($lower >= $upper
  3.     { 
  4.         return
  5.     }    
  6.  
  7.     $key = $arr[$lower]; 
  8.     $i = $lower
  9.     $j = $upper
  10.  
  11.     while($i < $j
  12.     { 
  13.         while($arr[++$i] < $key && $i < $j); 
  14.         while($arr[--$j] > $key); 
  15.  
  16.         if($i > $j
  17.         { 
  18.             break
  19.         } 
  20.  
  21.         $tmp = $arr[$j]; 
  22.         $arr[$j] = $arr[$i]; 
  23.         $arr[$i] = $tmp
  24.     } 
  25.      
  26.     $tmp = $arr[$j]; 
  27.     $arr[$j] = $arr[$lower]; 
  28.     $arr[$lower] = $tmp
  29.  
  30.     quick_sort($arr$lower$j - 1); 
  31.     quick_sort($arr$j + 1, $upper);