首页 > 程序开发 > Web开发 > PHP教程 > PHP进阶 > 网络编程 >

PHP 实现的字典序排列算法

2016-01-06

<?php if ($_POST["perdata"] == "") { $_POST["perdata"] = "1 2 3 4"; } $data = chop (trim ($_POST["perdata"])); $a = explode (" ", $data); sort ($a); $

<?php
  if ($_POST["perdata"] == "")
  {
    $_POST["perdata"] = "1 2 3 4";
  }

  $data = chop (trim ($_POST["perdata"]));
  $a = explode (" ", $data);
  sort ($a);
  $data = implode (" ", $a);
?>

<?php
function nextpermu (&$c)
{
  $s = sizeof ($c);
  $i = $s - 1;

  while ($i > 0)
  {
    if ($c[$i] > $c[$i-1])
    {
      $j = $s-1;
      while ($c[$j] <= $c[$i-1])
        $j--;
      $t = $c[$i-1];
      $c[$i-1] = $c[$j];
      $c[$j] = $t;
      //echo $i."-".$j."<br>";
      for ($j=$s-1; $i < $j; $i++, $j--)
      {
        $t = $c[$i];
	$c[$i] = $c[$j];
	$c[$j] = $t;
      }
      return true;
    }
    $i--;
  }

  for ($i = 0, $j=$s-1; $i < $j; $i++, $j--)
  {
    $t = $c[$i];
    $c[$i] = $c[$j];
    $c[$j] = $t;
  }
  return false;
}
?>
<html>
<head>
  <title>排列-字典法</title>
</head>
<body>
  <form action="permutation.php" method="post">
  <table>
    <tr>
      <td><input type="text" name="perdata"></td>
      <td><input type="submit" value="排列"></td>
    </tr>
  </table>
  </form>

  <p>当前元素:<? echo $data; ?></p>

  <table width="60%">
    <tr>
      <th width="50" bgcolor="yellow">序号</th>
      <th bgcolor="EEEEFF">排列</th>
    </tr>
<?php
  $num = 1;

  do
  {
?>
    <tr>
      <td align="center"><? echo $num; ?> </td>
      <td><? echo implode (" ", $a); ?></td>
    </tr>
<?php
    $num++;
  }
  while (nextpermu ($a));
?>
  </table>
</body>
</html>
相关文章
最新文章
热点推荐