特定阵列上的Quicksort?

时间:2014-05-08 02:43:25

标签: algorithm sorting quicksort

我有一个阵列(3,8,10,6,15,20,16,4,18,9)。要获得数组的中间元素,我需要添加最左边的索引为0,最右边的索引为9(0 + 9)= 9然后除以9/2然后给我4.现在pivot = a [我的问题是,由于15左右的数组中的每个元素都不能交换,因为它小于15但是右边的元素需要交换。我认为我做错了,我需要用枢轴交换元素。

1 个答案:

答案 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);