快速、冒泡排序算法,PHP版

1.冒泡排序算法改进:

方法一:

 1 function bubbleSort($arr){//$arr(1...n)是待排序的文件,采用自下向上扫描,对$arr做冒泡排序
 2     $bFlag = true; //交换标志
 3     for($i=0; $i<count($arr); $i++){ //最多做n-1趟排序
 4         $bFlag = false; //本趟排序开始前,交换标志应为假
 5         for($j = count($arr)-2; $j >= $i; $j--){ //对当前无序区$arr[i..n]自下向上扫描
 6             if( $arr[$j+1] < $arr[$j] ){//交换记录
 7                 $temp = $arr[$j+1]; //$temp不是哨兵,仅做暂存单元
 8                 $arr[$j+1] = $arr[$j];
 9                 $arr[$j] = $temp;
10                 $bFlag = true; //发生了交换,故将交换标志置为真
11             }
12         }
13         if(!$bFlag){ //本趟排序未发生交换,提前终止算法
14              break;
15         }
16     } //endfor(外循环)
17     print_r($arr);
18 } //BubbleSort

方法二:

 1 function bubbleSort($arr){
 2     $bSort = false;
 3     for ($i=0; $i<count($arr) && !$bSort; $i++) {  
 4         $bSort = true;
 5         for ($j = 0; $j<count($arr) - $i - 1; $j++) {  
 6             if ($arr[$j] > $arr[$j+1]) {  
 7                 $bSort = false;
 8                  // 不使用第三个变量  
 9                 $arr[$j] = $arr[$j] + $arr[$j+1];  
10                 $arr[$j+1] = $arr[$j] - $arr[$j+1];  
11                 $arr[$j] = $arr[$j] - $arr[$j+1];  
12             }  
13         }  
14     }
15 }

2.快速排序算法:

 1 function quick_sort($array) {
 2     if (count( $array ) <= 1) return $array;
 3     $key = $array [0];
 4     $left_arr = array ();
 5     $right_arr = array ();
 6     
 7     for($i = 1; $i < count( $array ); $i ++) {
 8         if ($array [$i] <= $key)
 9             $left_arr [] = $array [$i];
10         else
11             $right_arr [] = $array [$i];
12     }
13     $left_arr = quick_sort ( $left_arr );
14     $right_arr = quick_sort ( $right_arr );
15     return array_merge ( $left_arr, array ($key ), $right_arr );
16 }