<?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>"; }
相关推荐
PHP语言的几种排序算法和二分查找
本文将详细探讨PHP中常用的四种排序算法——冒泡排序、快速排序、选择排序和插入排序,以及两种查找算法。 1. **冒泡排序(Bubble Sort)**: 冒泡排序是一种简单直观的排序算法,它重复地遍历待排序的数列,一次比较...
│ │ ├── BubbleSort.php 冒泡排序 │ │ ├── HeapSort.php 堆排序 大根堆 │ │ ├── MBaseSort.php 基数排序 MSD │ │ ├── LBaseSort.php 基数排序 LSD │ │ ├── QuickSort.php 快速排序 │ │ ...
在PHP编程语言中,排序和查找是数据处理的两个核心概念。它们对于处理数组、数据库结果集等数据结构至关重要。本文将深入探讨PHP中的几种排序算法以及查找方法。 首先,让我们来了解一下PHP的四种内部排序法: 1. ...
总之,本篇文章详细介绍了PHP中的冒泡排序、二分查找、顺序查找以及二维数组排序算法函数,为需要进行相关操作的读者提供了实用的代码示例和详细说明。通过学习这些基础算法和数据结构处理方法,可以提升编程能力和...
在PHP中,常见的算法包括排序(冒泡排序、选择排序、插入排序、快速排序、归并排序等)、查找(线性查找、二分查找)、图算法(深度优先搜索、广度优先搜索)、动态规划、贪心算法、回溯算法等。 1. **排序算法**:...
根据给定的文件信息,我们可以总结出一系列与PHP编程语言相关的数据结构和算法知识点,这些内容不仅涵盖了基础的数组操作,还深入到了排序算法、搜索算法以及字符串处理方面。下面,我们将逐一解析并深入探讨。 ###...
而`a.php`可能是另一个算法类,具体功能未知,可能包含排序、查找或其他数学问题的解决方案。 在实际应用中,我们可以实例化这些算法类,然后调用其方法来处理数据,如下所示: ```php $algorithm = new Arithmetic...
在上述代码中,数组被用于二分查找、顺序查找、线性表的删除以及冒泡排序和快速排序等操作。 2. **二分查找**(bin_sch函数): - 二分查找是一种高效的查找算法,适用于已排序的数组。它将目标值与数组中间元素...
PHP 算法实现查找、排序和线性表操作 本文档主要介绍了 PHP 语言中实现查找、排序和线性表操作的算法,包括二分查找、顺序查找、冒泡排序、快速排序、约瑟夫环问题等。 二分查找 二分查找是一种高效的查找算法,...
在PHP的世界里,面试题是衡量开发者技能和经验的重要手段,尤其在算法这一领域,它直接反映了开发者的逻辑思维能力和问题解决能力。算法是计算机科学的基础,对于PHP开发者来说,理解并能熟练运用各种算法至关重要。...
### 数据结构和算法分析的PHP描述 #### 概述 本文档主要介绍了一些常见的数据结构和算法,并通过PHP语言来具体实现这些数据结构的操作。数据结构是指数据在计算机中的存储方式,而算法则是指对这些数据进行处理的...
1. **排序算法**:在PHP中,常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序等。这些算法各有优劣,如冒泡排序和选择排序适合小规模数据,而快速排序和归并排序则适用于大规模数据,了解...
总的来说,"php算法_王伟阳"这一主题涵盖了PHP编程中的核心算法知识和实用工具,对于想要提升PHP编程能力的开发者来说,是不可或缺的学习资源。通过深入理解和实践,我们可以更好地驾驭PHP,解决实际问题,打造出...
在准备面试,特别是针对微软这样的顶级科技公司的面试时,数据结构和算法是不可或缺的重要部分。这份资源"面试前必备(微软数据结构+算法)"包含了针对这类面试的100道题目,旨在帮助求职者全面了解和掌握相关知识。...
冒泡排序和快速排序是两种常见的排序算法,在编程中广泛应用于数据的排序处理。在PHP中实现这两种算法同样是非常实用的技能。下面我将详细介绍这两种排序算法的实现原理以及PHP中的代码实现。 首先我们来看冒泡排序...
《PHP算法大全:掌握编程核心技巧》 ... 一、排序算法 1. 冒泡排序:通过不断交换相邻的不正确顺序元素,逐步实现整体排序。...通过实践和理解这些代码,你将能够更深入地领略PHP算法的魅力,并在实际工作中游刃有余。
1. **排序算法**:排序是编程中最常见的需求,PHP中常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序。其中,快速排序和归并排序在效率上较为突出,适用于大数据量的处理;而冒泡排序和...