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 }