递归算法
设有a, b, c, d 4个字符,对其做全排列,可以有24种不同情形,如abcd,abdc,acbd… 等等。使用递归算法打印出所有24种排列
作者: LiveAsaMonster 发布时间: 2011-06-10
这个不需要使用递归也行的。
说个思路吧。。
利用排序,最原始的当然是冒泡了。
把数据排成 顺序,然后利用 冒泡排序 排成逆序。每一次的排序就是一个排列了。
说个思路吧。。
利用排序,最原始的当然是冒泡了。
把数据排成 顺序,然后利用 冒泡排序 排成逆序。每一次的排序就是一个排列了。
作者: yangball 发布时间: 2011-06-10
PHP code
Array
(
[0] => abcd
[1] => abdc
[2] => acdb
[3] => acbd
[4] => adbc
[5] => adcb
[6] => bcda
[7] => bcad
[8] => bdac
[9] => bdca
[10] => bacd
[11] => badc
[12] => cdab
[13] => cdba
[14] => cabd
[15] => cadb
[16] => cbda
[17] => cbad
[18] => dabc
[19] => dacb
[20] => dbca
[21] => dbac
[22] => dcab
[23] => dcba
)
$str = 'abcd'; $res = Arrangement( $str ); print_r($res); function Arrangement($arr = array(), $res = '') { if(! is_array($arr) ) $arr = str_split($arr); if(empty($arr)) $array[] = $res; else foreach($arr AS $k => $v) { unset($arr[$k]); foreach( Arrangement($arr, $res . $v) AS $t) $array[] = $t; $arr[$k] = $v; } return $array; }
Array
(
[0] => abcd
[1] => abdc
[2] => acdb
[3] => acbd
[4] => adbc
[5] => adcb
[6] => bcda
[7] => bcad
[8] => bdac
[9] => bdca
[10] => bacd
[11] => badc
[12] => cdab
[13] => cdba
[14] => cabd
[15] => cadb
[16] => cbda
[17] => cbad
[18] => dabc
[19] => dacb
[20] => dbca
[21] => dbac
[22] => dcab
[23] => dcba
)
作者: xuzuning 发布时间: 2011-06-10