<?php /* * php常用算法集合 * */ //格式化输出 function dump($obj) { echo '<pre>'; print_r($obj); echo '</pre>'; } //交换数据 function swap(&$a, &$b) { $tmp = $a; $a = $b; $b = $tmp; } //快速排序 function quick_sort($a) { if (count($a) <= 1) { return $a; } $l = array(); $r = array(); $x = $a[0]; $c = count($a); for ($i = 1; $i < $c; $i++) { if ($a[$i] <= $x) { $l[] = $a[$i]; } else { $r[] = $a[$i]; } } $l = quick_sort($l); $r = quick_sort($r); return array_merge($l, array($x), $r); } //选择排序 function select_sort($a) { $n = count($a); for ($i = 0; $i < $n; $i++) { $min = $i; for ($j = $i + 1; $j < $n; $j++) { if ($a[$j] < $a[$min]) { $min = $j; } } swap($a[$i], $a[$min]); } return $a; } //插入排序 function insert_sort($a) { $n = count($a); for ($i = 1; $i < $n; $i++) { if ($a[$i] < $a[$i - 1]) { $temp = $a[$i]; for ($j = $i - 1; (($j >= 0) && $a[$j] > $temp); $j--) { $a[$j + 1] = $a[$j]; } $a[$j + 1] = $temp; } } return $a; } //冒泡排序 function bubble_sort($a) { $n = count($a); for ($i = 0; $i < $n; $i++) { for ($j = $i; $j < $n; $j++) { if ($a[$i] > $a[$j]) { swap($a[$i], $a[$j]); } } } return $a; } //希尔排序 function shell_sort($a) { $n = count($a); for ($gap = $n / 2; $gap > 0; $gap = intval($gap / 2)) { for ($i = $gap; $i < $n; $i++) { //从gap开始, if ($a[$i] < $a[$i - $gap]) { //从$gap开始,每个元素与自己组内的数据进行直接插入排序 $temp = $a[$i]; for ($k = $i - $gap; ($k >= 0 && $a[$k] > $temp); $k-=$gap) { $a[$k + $gap] = $a[$k]; } $a[$k + $gap] = $temp; } } } return $a; } //顺序查找 function sequential_search($a, $finded) { $length = count($a); for ($i = 0; $i < $length; $i++) { if ($a[$i] == $finded) { return $i; } } return -1; } //折半查找 || 二分查找 function half_search($a, $low, $hight, $finded) { while ($low <= $hight) { $middle = intval(($low + $hight) / 2); if ($a[$middle] == $finded) { return $middle; } else if ($a[$middle] < $finded) { $low = $middle + 1; } else if ($a[$middle] > $finded) { $hight = $middle - 1; } } return -1; } //排列组合 class Permutation { var $srcList; //存放原始数列数组 var $rstList; //存放最终数列数组 var $srcLen; //原始数列的长度 var $rstLen; //结果数列的长度 var $rstOrder; //求排列或组合标志 function Permutation($m) { if (!is_array($m)) { echo "参数类型错误:Permutation(array $m) $m为数组类型"; return false; } $this->srcLen = count($m); $this->srcList = $m; } //取得排列组合结果, $order=1为取排列,$order=2为取组合 function getList($n, $order = 1) { if (!is_int($n)) { echo "参数类型错误:getList(int $n) $n为整数类型"; return false; } if ($n > $this->srcLen) { echo "要求的排列组合的长度不能大于原始数列的长度"; return false; } $this->rstLen = $n; $this->rstOrder = $order; $this->rstList = array(); $this->doPermutation($this->srcList, $this->rstLen); return $this->rstList; } //递归计算从m中取n的排列, $rst存取出的排列 function doPermutation($m, $n, &$rst = array()) { //如果已经取完 if ($n == 0) { $this->rstList[] = $rst; $rst = array(); return true; } //从当前数列m中选取一个值,并更新数列m foreach ($m as $key => $value) { $nextM = $m; //判断是取排列还是组合 switch ($this->rstOrder) { //取排列, 清空当前取出的值 case 1: unset($nextM[$key]); break; //取组合, 清空当前及前面所取的值 case 2: array_splice($nextM, 0, $key + 1); break; default:unset($nextM[$key]); break; } $nextRst = $rst; //将取的值放到结果数列中 $nextRst[] = $value; $this->doPermutation($nextM, $n - 1, $nextRst); } } } $m = array(0, 1, 2, 3, 4, 5); $p = new Permutation($m); $arr = $p->getList(3, 1); foreach ($arr as $value) { echo implode(",", $value) . "<br>"; }
相关推荐
│ │ ├── BubbleSort.php 冒泡排序 │ │ ├── HeapSort.php 堆排序 大根堆 │ │ ├── MBaseSort.php 基数排序 MSD │ │ ├── LBaseSort.php 基数排序 LSD │ │ ├── QuickSort.php 快速排序 │ │ ...
主要介绍了PHP四种基本排序算法和两种查找算法示例,本文用一个实例讲解冒泡排序法、快速排序法、选择排序法、插入排序法的使用,需要的朋友可以参考下
本篇文章是对PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数进行了详细的分析介绍,需要的朋友参考下
php排序算法代码,包括冒泡排序与快速排序,需要的朋友可以参考下
主要介绍了PHP各种常见经典算法,结合实例形式总结分析了php排序、查找、翻转等算法相关实现技巧,需要的朋友可以参考下
本文实例讲述了PHP排序算法之堆排序(Heap Sort)。分享给大家供大家参考,具体如下: 算法引进: 在这里我直接引用《大话数据结构》里面的开头: 在前面讲到 简单选择排序 ,它在待排序的 n 个记录中选择一个最小的...
这里是用PHP写的几个基础算法,算法的重要性貌似对于PHP程序员不怎么重要,其实是非常重要的,经典名句:算法+数据结构=程序。作为一名真正的高级PHP程序员,我认为应该熟悉C,如果你想成为真正的程序员,请好好学C...
包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】...
在前面讲到 简单选择排序 ,它在待排序的 n 个记录中选择一个最小的记录需要比较 n – 1 次,本来这也可以理解,查找第一个数据需要比较这么多次是正常的,否则如何知道他是最小的记录。 可惜的是,这样的操作并没有...
主要介绍了php经典算法,实例分析了汉诺塔、排序、查找、递归等算法技巧,具有一定参考借鉴价值,需要的朋友可以参考下
主要介绍了PHP经典算法集锦,整理了各种常见的算法,包括排序、查找、遍历、运算等各种常见算法原理与实现技巧,需要的朋友可以参考下
)收藏评论(0)举报资料介绍基于Python分别讲解了算法是程序的灵魂,数据结构,常用的算法思想,线性表、队列和栈,树,图,查找算法,内部排序算法,经典的数据结构问题,解决数学问题,经典算法问题,解决图像问题...
复制代码 代码如下: $cityname =...array()、array_search()、array_key_exists()使用实例php冒泡排序、快速排序、快速查找、二维数组去重实例分享PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解解析php二
本文实例讲述了PHP折半(二分)查找算法。分享给大家供大家参考,具体如下: 折半查询只适用于已经按照正序或者逆序排序的数组,字符串等; 算法: 先取数组的中间位置,无中间位置,则向下取整; 从中间进行折半,...
复制代码 代码如下: $a=array(’11’,’2′,’13’,’... 您可能感兴趣的文章:php数组冒泡排序算法实例php冒泡排序与快速排序实例详解又一个PHP实现的冒泡排序算法分享php冒泡排序、快速排序、快速查找、二维数组去重实
因此翻看 PHP 手册查找到了如下方法,做此笔记。废话少说,奉上代码,清单如下: 复制代码 代码如下: <?php /** * 二维数组根据某个字段排序 * 功能:按照用户的年龄倒序排序 * @author ruxing.li */ header(...