<?php |
/** |
* 快速排序 quick sort |
* |
**/ |
function sort_quick( $arrData ) { |
if ( empty ( $arrData ) || ! is_array ( $arrData )) return false; |
$flag = $arrData [0]; |
$len = count ( $arrData ) - 1; |
if ( $len == 0) return $arrData ; // 如果只有一个数据的数组直接返回 |
$arrLeft = array (); |
$arrRight = array (); |
$len_l = 0; |
$len_r = 0; |
for ( $i = 1; $i <= $len ; $i ++) { |
if ( $arrData [ $i ] < $flag ) { |
$arrLeft [ $len_l ] = $arrData [ $i ]; // 小于的放左边 |
$len_l ++; |
} else { |
$arrRight [ $len_r ] = $arrData [ $i ]; // 大于等于的放右边 |
$len_r ++; |
} |
} |
// 合并数组 |
$arrResult = array (); |
if ( $len_l ) { |
$arrLeft = sort_quick( $arrLeft ); |
for ( $i = 0; $i <= $len_l - 1; $i ++ ) { |
$arrResult [ $i ] = $arrLeft [ $i ]; |
} |
} |
$arrResult [ $len_l ] = $flag ; |
$len_l ++; |
if ( $len_r ) { |
$arrRight = sort_quick( $arrRight ); |
for ( $i = 0; $i <= $len_r - 1; $i ++ ) { |
$arrResult [ $len_l ] = $arrRight [ $i ]; |
$len_l ++; |
} |
} |
echo "== " , $flag , " ==========================================<br/>" ; |
echo "data : " ,print_r( $arrData ), "<br/>" ; |
echo "filter left: " ,print_r( $arrLeft ), "<br/>" ; |
echo "filter right: " ,print_r( $arrRight ), "<br/>" ; |
echo "return : " ,print_r( $arrResult ), "<br/>" ; |
return $arrResult ; |
} |
//$list = array(4,3,2,1,5,7,3,7); |
$list = array (4,51,6,73,2,5,9,33,50,3,4,6,1,4,67); |
$list = sort_quick( $list ); |
echo "<pre>" ;print_r( $list ); |