Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  php  >  正文 php数组全排列的非递归算法的实例代码

php数组全排列的非递归算法的实例代码

发布时间:2016-07-14   编辑:www.jquerycn.cn
本文介绍下,php中对数组进行全排列的非递归算法的代码一例,有需要的朋友,参考下吧。

有关php数组全排列的递归算法的代码,参见文章:php全排列的递归算法的代码 。

以下是php数组全排例的非递归算法实现代码:

<?php
    /**
    * 取得数组的全排列
    *
    * @param array $source 待排列数组,一维
    * @return array
    * @site www.jbxue.com
    */
    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 元素的值
                $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全排列的递归算法的代码
php数组全排列的非递归算法的实例代码
php递归示例 php递归函数代码
一文了解Python中的递归
【PHP面试】面试必问的两个简单排序算法讲解:冒泡排序和快速排序
javascript排序算法代码解析
javascript解三阶幻方谜题
PHP递归算法实例解析
PHP全排列算法实现程序代码
排序算法—归并排序【附代码】

关键词: php递归算法  php数组  递归算法   
[关闭]