代码之家  ›  专栏  ›  技术社区  ›  Ken

是否可以使快速排序函数排序数组降序?

  •  0
  • Ken  · 技术社区  · 15 年前

    我得到了下面的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);
    
    }
    
    4 回复  |  直到 13 年前
        1
  •  2
  •   Martijn    15 年前

    简单:在比较元素时,将“>”更改为“<”,反之亦然。

    这适用于所有排序算法和任何类型的排序:将数组元素的任何比较替换为回答排序数组中一个元素应优先于另一个元素的问题的任何表达式。

        2
  •  2
  •   Dario    15 年前

    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 ?

        3
  •  0
  •   xtofl Adam Rosenfield    15 年前

    function q_sort( &$numbers, $left, $right,$level, $comparison )
    {
    ...
        if( $comparison->ordered( $left, $right ) )
        {...
        }
    }
    
        4
  •  0
  •   brian-brazil    15 年前

    不要编写自己的排序函数,请使用以下内置函数之一:

    function cmp($a, $b) {
            return a->RegID - b->RegID;
    }
    uasort($a, "cmp");