首页 > 学院 > 逻辑算法 > 正文

PHP数组非递归全排列算法

2020-03-22 18:02:37
字体:
来源:转载
供稿:网友
  • function getAllPerm($source) {     $rs = array();     sort($source);     $last = count($source) - 1;     $z = 0;     $x = $last;     $rs[] = $source;      while($x > 0)     {         // 相邻的两个元素,先将x的值赋给y,x再自减1         $y = $x--;          // 如果前一个元素的值小于后一个元素的值         if($source[$x] < $source[$y])         {             // 从尾部开始,找到第一个大于 $x 元素的值  www.it165.net            $z = $last;             while($source[$x] > $source[$z])             {                 $z--;             }              // 交换 $x 和 $z 元素的值             list($source[$x], $source[$z]) = array($source[$z], $source[$x]);              // 将 $y 之后的元素全部逆向排列             for($i = $last; $i > $y; $i--, $y++)             {                 list($source[$i], $source[$y]) = array($source[$y], $source[$i]);             }             $rs[] = $source;             $x = $last;         }     }     return $rs; }  $source = array(1,2,3); $rs = getAllPerm($source); print_r($rs); 

     

    输出结果:

     

    Array (     [0] => Array         (             [0] => 1             [1] => 2             [2] => 3         )      [1] => Array         (             [0] => 1             [1] => 3             [2] => 2         )      [2] => Array         (             [0] => 2             [1] => 1             [2] => 3         )      [3] => Array         (             [0] => 2             [1] => 3             [2] => 1         )      [4] => Array         (             [0] => 3             [1] => 1             [2] => 2         )      [5] => Array         (             [0] => 3             [1] => 2             [2] => 1         )  )
    PHP编程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表