Php 如何将快速排序更改为按降序输出元素?

Php 如何将快速排序更改为按降序输出元素?,php,quicksort,Php,Quicksort,我写了一个快速排序算法,但是,我想在某个地方做一个更改,以便这个快速排序可以按降序输出元素 我搜索并发现我可以更改比较运算符($pivot){$r--;} 但是它不起作用 如果我对下面的数组进行快速排序, $array=(3,9,5,7) 应该是: $array=(9,7,5,3) 但实际产出是: $array=(3,5,7,9) 下面是我尝试按降序输出元素的快速排序。 我应该如何更改以降序排序?如果您需要任何澄清,请让我知道。谢谢 $array = array(3,9,5,7); $app

我写了一个快速排序算法,但是,我想在某个地方做一个更改,以便这个快速排序可以按降序输出元素

我搜索并发现我可以更改比较运算符($pivot){$r--;} 但是它不起作用

如果我对下面的数组进行快速排序, $array=(3,9,5,7)

应该是:

$array=(9,7,5,3)

但实际产出是:

$array=(3,5,7,9)

下面是我尝试按降序输出元素的快速排序。 我应该如何更改以降序排序?如果您需要任何澄清,请让我知道。谢谢

$array = array(3,9,5,7);
$app = new QuicksortDescending();
$app->quicksortDesc($array, 0, count($array));
print_r($array);


class QuicksortDescending {

public function partitionDesc(&$array, $left, $right) {
        $l = $left;
        $r = $right;
        $pivot = $array[($right+$left)/2];

        while($l <= $r) {
            while($array[$l] > $pivot) { $l++; }
            while($array[$r] < $pivot) { $r--; }
            if($l <= $r) {// if L and R haven't cross
                $this->swap($array, $l, $r);
                $l ++;
                $j --;
            }
        }
        return $l;
    }


public function quicksortDesc(&$array, $left, $right) {
        $index = $this->partitionDesc($array, $left, $right);
        if($left < $index-1) { //if there is more than 1 element to sort on right subarray
            $this->quicksortDesc($array, $left, $index-1);
        }
        if($index < $right) { //if there is more than 1 element to sort on right subarray
            $this->quicksortDesc($array, $index, $right);
        }
    }

public function swap(&$array, $index1, $index2) {
        $tmp = $array[$index1];
        $array[$index1] = $array[$index2];
        $array[$index2] = $tmp;

    }

}
$array=array(3,9,5,7);
$app=新的QuicksortDescending();
$app->quicksortDesc($array,0,count($array));
打印(数组);
类快速排序{
公共函数partitionDesc(&$array,$left,$right){
$l=$left;
$r=$right;
$pivot=$array[($right+$left)/2];
而($l$pivot){$l++;}
而($array[$r]<$pivot){$r--;}

如果($l),则在比较两个元素时,只需交换比较运算符
,反之亦然:

while($array[$l] < $pivot) { $l++; }
while($array[$r] > $pivot) { $r--; }
while($array[$l]<$pivot){$l++;}
而($array[$r]>$pivot){$r--;}

不要更改快速排序实现,而是从头开始迭代数组:

for ($i = count($array)-1; $i>=0; $i--) {
  // do something with $array[$i];
}

谢谢!有点不起作用,但现在起作用了..嗯
for ($i = count($array)-1; $i>=0; $i--) {
  // do something with $array[$i];
}