php對陣列進行全排列的非遞迴演算法
- /**
- * 取得陣列的全排列
- *
- * @author ustb80
- * @param array $source 待排列陣列,一維
- * @return array
- */
- 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
- )
- )
本文轉自 ustb80 51CTO部落格,原文連結:http://blog.51cto.com/ustb80/1033843,如需轉載請自行聯絡原作者
相關文章
- 【演算法】遞迴實現全排列演算法遞迴
- php陣列轉xml的遞迴實現PHP陣列XML遞迴
- 遞迴解決全排列問題遞迴
- JavaScript陣列元素全排列JavaScript陣列
- js陣列全排列問題JS陣列
- 資料結構與演算法——歸併排序: 陣列&連結串列&遞迴&非遞迴解法全家桶資料結構演算法排序陣列遞迴
- 遞迴演算法轉換為非遞迴演算法的技巧遞迴演算法
- 全排列的實現之遞迴版與迭代版遞迴
- 資料結構:遞增排列的陣列 union all 演算法 2.1資料結構陣列演算法
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- JavaScript斐波納契數列非遞迴演算法JavaScript遞迴演算法
- 快速排序(遞迴及非遞迴演算法原始碼)排序遞迴演算法原始碼
- 斐波那契數列的遞迴和非遞迴實現遞迴
- 漢諾塔非遞迴演算法遞迴演算法
- php url傳遞陣列PHP陣列
- [演算法] 固定的元素在固定長度上進行全排列演算法
- 快速排序【遞迴】【非遞迴】排序遞迴
- 陣列filter方法對陣列元素進行過濾陣列Filter
- 遞迴演算法實踐---實現排列組合遞迴演算法
- 如何遞迴實現陣列求和遞迴陣列
- 遞迴求解陣列中的最大值遞迴陣列
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- php陣列迴圈遍歷PHP陣列
- for迴圈訪問php的索引陣列PHP索引陣列
- 一道遞迴陣列面試題遞迴陣列面試題
- 陣列分割,把陣列分割成和相等的兩部分--遞迴方法陣列遞迴
- 全排列演算法演算法
- 演算法——全排列演算法
- 斐波那契數列(Fibonacci)遞迴和非遞迴實現遞迴
- 【演算法拾遺】二分查詢遞迴非遞迴實現演算法遞迴
- 二叉樹建立及遍歷演算法(遞迴及非遞迴)二叉樹演算法遞迴
- 重新排列陣列陣列
- php 迴圈陣列引用傳值改變陣列本身的值PHP陣列
- 二十一、氣泡排序演算法——JAVA實現(遞迴與非遞迴)排序演算法Java遞迴
- 楊輝三角與陣列遞迴累加陣列遞迴
- 程式碼隨想錄演算法訓練營day29 | leetcode 491. 非遞減子序列、46. 全排列、47. 全排列 II演算法LeetCode
- Ajax傳遞陣列 (PHP後臺接收)陣列PHP
- php 陣列傳到前端 js進行處理PHP陣列前端JS