我有以下php功能,并希望将其更改为降序排序,有人可以帮助我:
function quickSort(&$numbers, $array_size,$level)
{
q_sort($numbers, 0, $array_size - 1,$level);
}
function q_sort(&$numbers, $left, $right,$level)
{
$l_hold = $left;
$r_hold = $right;
$pivot = $numbers[$left];
while ($left < $right)
{
if ($level == 'RegID')
{
while (($numbers[$right]->RegID >= $pivot->RegID) && ($left < $right))
$right--;
}
if ($left != $right)
{
$numbers[$left] = $numbers[$right];
$left++;
}
if($level == 'RegID')
{
while (($numbers[$left]->RegID >= $pivot->RegID) && ($left < $right))
$left++;
}
if ($left != $right)
{
$numbers[$right] = $numbers[$left];
$right--;
}
}
$numbers[$left] = $pivot;
$pivot = $left;
$left = $l_hold;
$right = $r_hold;
if ($left < $pivot)
q_sort($numbers, $left, $pivot-1,$level);
if ($right > $pivot)
q_sort($numbers, $pivot+1, $right,$level);
}
答案 0 :(得分:2)
简单:无论何时比较元素,都要更改'&gt;'到'&lt;'反之亦然。
这适用于所有排序算法和任何类型的排序:用任何表达式替换数组元素的任何比较,回答一个元素的问题应该在排序数组中的另一个元素之前。
答案 1 :(得分:2)
当然是。看看the algorithm是如何运作的。
if ($level == 'RegID')
{
// Comparison
while (($numbers[$right]->RegID >= $pivot->RegID) && ($left < $right))
$right--;
}
if ($left != $right)
{
$numbers[$left] = $numbers[$right];
$left++;
}
if($level == 'RegID')
{
// Comparison
while (($numbers[$left]->RegID >= $pivot->RegID) && ($left < $right))
$left++;
}
您只需要更改算法决定一个元素是否大于另一个元素的方式 - 因此您必须将比较运算符从>=
更改为<
。
注意:你不能只使用builtin sort function吗?
答案 2 :(得分:0)
'通用'方式是提供比较功能(对象),如
function q_sort( &$numbers, $left, $right,$level, $comparison )
{
...
if( $comparison->ordered( $left, $right ) )
{...
}
}
答案 3 :(得分:0)
不要编写自己的排序函数,使用其中一个内置函数:
function cmp($a, $b) {
return a->RegID - b->RegID;
}
uasort($a, "cmp");