递归算法

设有a, b, c, d 4个字符,对其做全排列,可以有24种不同情形,如abcd,abdc,acbd… 等等。使用递归算法打印出所有24种排列

作者: LiveAsaMonster   发布时间: 2011-06-10

这个不需要使用递归也行的。

说个思路吧。。

利用排序,最原始的当然是冒泡了。
把数据排成 顺序,然后利用 冒泡排序 排成逆序。每一次的排序就是一个排列了。

作者: yangball   发布时间: 2011-06-10

PHP code
$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