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 '<pre>';
print_r($rs);
print '</pre>';
PHP全排列递归算法
最新推荐文章于 2021-03-10 16:07:13 发布