浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)


Posted in PHP onMarch 14, 2017

实例如下:

<?php
/*分治法——直接选择
比如说a b c
首先将a之后的字符依次与a进行交换
1 b,a,c
2 c,b,a
注意这里少了一个原始数据 a,b,c。需要把原始数据也算如排列中
3 a,b,c

然后把字符移到第二个位置,将第二个位置之后的数分别与第二个位置的数进行交换
1 b,a,c ===> 11 b,c,a
2 c,b,a ===> 21 c,a,b
3 a,b,c ===> 31 a,c,b

**/
function zuhe($arr,$begin){
  if(!is_array($arr)) return ;
  $N = count($arr);
  if($begin == $N-1 || $begin >$N || $begin <0) return ;
  if($begin == 0){
    print_r($arr);//输出原始数据
    echo '</br>';
  } 
  //循环将初始值与第i个值交换后进行组合
  for($i = $begin;$i < $N;$i++){

    $t = $arr[$begin];
    $arr[$begin] = $arr[$i];
    $arr[$i] = $t;

    if($i!==$begin){//i==begin时的数已经输出过
      print_r($arr);
      echo '</br>';
    }
    zuhe($arr,$begin+1);  
    $t = $arr[$begin];
    $arr[$begin] = $arr[$i];
    $arr[$i] = $t;

  }
}

$arr = array('a','b','c','d');
//zuhe($arr,0);


/*分治法——直接插入
初始时从0个元素开始,输出初始序列,为组合的一个序列
当在来一个元素时只需将该元素放在该元素之前的元素组的不同的位置即组成了不同的排列
如已有元素组为a,b.新元素为c,把c分别与a,b进行交换即可(a,c,b);(c,b,a),在现有的排列上在新增元素
重复执行以上步骤
*/
function zuhe2($arr,$begin){
  if($begin==0) {
    print_r($arr);
    echo "</br>";
    //zuhe2($arr,$begin+1);
  }
  if($begin >= count($arr)) return ;
  zuhe2($arr,$begin+1);//begin时的排列上一次已产生,直接新增元素
  for($i = $begin-1;$i>=0;$i--){
    $t = $arr[$begin];
    $arr[$begin] = $arr[$i];
    $arr[$i] = $t;
    print_r($arr);
    echo "</br>";
    zuhe2($arr,$begin +1);
    $t = $arr[$begin];
    $arr[$begin] = $arr[$i];
    $arr[$i] = $t;
  }
}

以上这篇浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
谈谈新手如何学习PHP
Dec 14 PHP
PHP 采集心得技巧
May 15 PHP
php获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
php抓取页面的几种方法详解
Jun 17 PHP
php导出excel格式数据问题
Mar 11 PHP
php广告加载类用法实例
Sep 23 PHP
浅析php工厂模式
Nov 25 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
PHP实现的购物车类实例
Jun 17 PHP
[原创]php实现数组按拼音顺序排序的方法
May 03 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
php 截取中英文混合字符串的方法
May 31 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 #PHP
PHP输出多个元素的排列或组合的方法
Mar 14 #PHP
Linux下快速搭建php开发环境
Mar 13 #PHP
php创建图像具体步骤
Mar 13 #PHP
PHP+MYSQL实现读写分离简单实战
Mar 13 #PHP
PHP计算近1年的所有月份
Mar 13 #PHP
PHP解耦的三重境界(浅谈服务容器)
Mar 13 #PHP
You might like
基于文本的搜索
2006/10/09 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
php DES加密算法实例分析
2019/09/18 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
AngularJS实现自定义指令及指令配置项的方法
2017/11/20 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
js实现计时器秒表功能
2019/12/16 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
python3之微信文章爬虫实例讲解
2017/07/12 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
python实现学生通讯录管理系统
2021/02/25 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
幼教个人求职信范文
2013/12/02 职场文书
偷看我的初中毕业鉴定
2014/01/29 职场文书
十二生肖观后感
2015/06/12 职场文书
小学数学国培研修日志
2015/11/13 职场文书
2016年三八节红领巾广播稿
2015/12/17 职场文书