我有一个阵列(3,8,10,6,15,20,16,4,18,9)。要获得数组的中间元素,我需要添加最左边的索引为0,最右边的索引为9(0 + 9)= 9然后除以9/2然后给我4.现在pivot = a [我的问题是,由于15左右的数组中的每个元素都不能交换,因为它小于15但是右边的元素需要交换。我认为我做错了,我需要用枢轴交换元素。
答案 0 :(得分:0)
您可以在此处阅读link
function quicksort(array $arr, $left, $right)
{
$i = $left;
$j = $right;
$separator = $arr[floor(($left + $right) / 2)];
while ($i <= $j) {
while ($arr[$i] < $separator) {
$i++;
}
while($arr[$j] > $separator) {
$j--;
}
if ($i <= $j) {
$tmp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
$i++;
$j--;
}
}
if ($left < $j) {
$arr = quicksort($arr, $left, $j);
}
if ($right > $i) {
$arr = quicksort($arr, $i, $right);
}
return $arr;
}
// Example:
$arr = array(3, 8, 10, 6, 15, 20, 16, 4, 18, 9);
$result = quicksort($arr, 0, (sizeof($arr)-1));
print_r($result);