php实现快速排序
快速排序:这个算法是参考百度百科的C语言的代码,没有参考php的代码,因为php的代码虽然思路简单,但是中间需要开好得多数组,太过于耗内存。
先获取第一个值为关键字,让i指向第一个,j指向最后一个,先从最后一个找比key小的,j指向它,将它放在i指向的地方,然后i再向前走,直到找到比key大的,放在j指向的地方,就这样循环,直到i=j的时候,关闭循环。
<?php
$arr=array(1,2,3,5,2,3,9,8,3,2,7,4,9,8,0,4,587,93,47,59,8,2,6,83,4,9,65,2,18,7);
printArr($arr);
function quick(&$arr,$left,$right){
if($left<$right){ //设置递归在这里停下来
$key=$arr[$left]; //获取关键值
$i=$left; //左指针
$j=$right; //右指针
while($i<$j){
while($j>$i && $key<=$arr[$j])
$j--;
$arr[$i]=$arr[$j];
while($i<$j && $key>=$arr[$i])
$i++;
$arr[$j]=$arr[$i];
}
$arr[$j]=$key; //关键的就是这里,这个必须要把最后的值给$i为下标的数组值
quick($arr,$left,$j);
quick($arr,$j+1,$right);
}
}
quick($arr,0,count($arr)-1);
printArr($arr);
function printArr($arr){
for($i=0;$i<count($arr);$i++)
echo ' '.$arr[$i];
echo "\n";
}
?>