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";
}
?>