方法一
function show($str){ if(count($str)>1){ $k=$str[0]; $x=array(); $y=array(); $_size=count($str); for($i=1;$i<$_size;$i++){ if($str[$i]<=$k){ $x[]=$str[$i]; }elseif($str[$i]>$k){ $y[]=$str[$i]; } } $x=show($x); $y=show($y); return array_merge($x,array($k),$y); }else{ return $str; } } $a=2345283094; $arr=str_split($a,1); $arr1=show($arr); $arr2=implode($arr1); echo $arr2;方法二:
function myQuickSort(&$arr){ //首先判断数组的长度,如果大于1则进行排序 if(count($arr)>1){ //选取数组中第一个元素作为比较的关键字 $key = $arr[0]; $left = array(); $right = array(); $len = count($arr); $i=1; $j=$len-1; $bank = $len%2; //如果数组长度为奇数,则左右数组的比较次数相等 //如果数组长度为偶数,则右数组的比较次数比左数组多一次 if($bank==1){ //先从数组的右端开始比较,比较次数为x for($x = 0;$x<($len-1)/2;$x++){ if($arr[$j]<=$key){ $left[] = $arr[$j]; $j--; } else{ $right[] = $arr[$j]; $j--; } //再从数组的左端比较,比较次数为x if($arr[$i]>=$key){ $right[] = $arr[$i]; $i++; } else{ $left[] = $arr[$i]; $i++; } } }else{ for($x=0;$x<$len/2;$x++){ //从数组右端开始比较,比较次数为x if($arr[$j]<=$key){ $left[] = $arr[$j]; $j--; } else{ $right[] = $arr[$j]; $j--; } if($x==(($len/2)-1)){ break; } //从数组左端比较,比较次数为x-1 if($arr[$i]>=$key){ $right[] = $arr[$i]; $i++; } else{ $left[] = $arr[$i]; $i++; } } } }else{ return $arr; } //嵌套,直到排序完成 $left = myQuickSort($left); $right = myQuickSort($right); //将比较后的数组合并,返回数据 return array_merge($left,array($key),$right); }