php 排序算法程序不用递归

function quickSort(&$data, $beg, $end) 

02 { 

03 if ($end > $beg) { 

04 $piv = $data[$beg]; 

05 $k = $beg + 1; 

06 $r = $end; 

07 while ($k < $r) { 

08 if ($data[$k] < $piv) { 

09 $k++; 

10 } else { 

11 $tmp = $data[$k]; 

12 $data[$k] = $data[$r]; 

13 $data[$r] = $tmp; 

14 $r--; 

15 } 

16 } 

17 if ($data[$k] >= $piv) { 

18 $k--; 

19 } 

20 $tmp = $data[$k]; 

21 $data[$k] = $data[$beg]; 

22 $data[$beg] = $tmp; 

23 quickSort($data, $beg, $k); 

24 quickSort($data, $r, $end); 

25 } 

26 } 

27   

28 function quickSort2(&$data) 

29 { 

30 $stack = array(); 

31 array_push($stack, array(0, count($data) - 1)); 

32 while (list($beg, $end) = array_pop($stack)) { 

33 if ($end > $beg) { 

34 $piv = $data[$beg]; 

35 $k = $beg + 1; 

36 $r = $end; 

37 while ($k < $r) { 

38 if ($data[$k] < $piv) { 

39 $k++; 

40 } else { 

41 $tmp = $data[$k]; 

42 $data[$k] = $data[$r]; 

43 $data[$r] = $tmp; 

44 $r--; 

45 } 

46 } 

47 if ($data[$k] >= $piv) { 

48 $k--; 

49 } 

50 $tmp = $data[$k]; 

51 $data[$k] = $data[$beg]; 

52 $data[$beg] = $tmp; 

53 array_push($stack, array($beg, $k)); 

54 array_push($stack, array($r, $end)); 

55 } 

56 } 

57 } 

58   

59 $data = array(7,6,6,3,8,1,8,1,9,1,3,11,51,1,25); 

60 //selectSort($data); 

61 //insertSort($data); 

62 quickSort2($data);

时间: 2024-09-13 11:27:40

php 排序算法程序不用递归的相关文章

不用递归遍历一颗二叉树

问题描述 不用递归遍历一颗二叉树 用递归遍历二叉树很简单,但是现在的问题是,能不能不用递归去遍历呢?用C#或者Java给出代码更好. 解决方案 简单来说有两个思路 (1)使用后序遍历的方法.也就是说对于一个节点,先找它的左子节点,再找右子节点,最后找它本身.(深度优先) (2)使用线形表来存储二叉树.二叉树是可以直接用线形表表达的.(广度优先) 解决方案二: 给出C++代码吧!把递归改为非递归,一般都是通过栈来实现.函数递归的原理也是利用了栈. 首先来看前序遍历:前序遍历是先访问当前结点,再访问

PHP教程:不用递归遍历目录下的文件

  如果要遍历某个目录下的所有文件(包括子目录),最首先想到的思路就是用递归:先处理当前目录,再处理当前目录下的子目录.不用递归可不可以呢?以前学数据结构的时候看到过,递归其实是利用堆栈来实现的,递归的特点就是不断的调用自身,最后一次的调用是最先执行完的,倒数第二次调用是其次执行完的,依次类推,最初的调用是最后执行完的.如果理解了递归的原理,其实就可以把所有用递归的实现转化为非递归的实现. 用非递归方式遍历某个目录下的所有文件,思路主要分三步: 1. 创建一个数组,将要遍历的这个目录放入;(其实

不用递归实现树形结构的一种方法

递归 不用递归实现树形结构的一种方法 主要的技巧在Level(帖子回复深度)的操作上 SunADM 于 2000.07.26____________________________________________演示表的结构____________________________________________ 表名:BBS 字段数据类型说明ID自动编号 RootIDInt根帖ID,本身为根帖则RootID = IDFIDInt父帖ID,上一层帖子的ID,如是根帖则FID = NULLLevel

PHP不用递归遍历目录下所有文件的代码_php实例

实现代码: /** * PHP 非递归实现查询该目录下所有文件 * @param unknown $dir * @return multitype:|multitype:string */ function scanfiles($dir) { if (! is_dir ( $dir )) return array (); // 兼容各操作系统 $dir = rtrim ( str_replace ( '\\', '/', $dir ), '/' ) . '/'; // 栈,默认值为传入的目录 $

PHP不用递归实现无限分级的例子分享_php实例

两个不用递归的树形数组操作函数 复制代码 代码如下: /** * 创建父节点树形数组 * 参数 * $ar 数组,邻接列表方式组织的数据 * $id 数组中作为主键的下标或关联键名 * $pid 数组中作为父键的下标或关联键名 * 返回 多维数组 **/function find_parent($ar, $id='id', $pid='pid') {   foreach($ar as $v) $t[$v[$id]] = $v;  foreach ($t as $k => $item){    i

不用递归实现论坛树型结构的算法

递归|树型结构|算法 <jsp:useBean id="mybbs" scope="session" class="netzero.mydb" /> <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.io.*" %> <%@ page import="java.

php+mysql不用递归实现的无限级分类实例(非递归)_php实例

要实现无限级分类,递归一般是第一个也是最容易想到的,但是递归一般被认为占用资源的方法,所以很多系统是不考虑使用递归的 本文还是通过数据库的设计,用一句sql语句实现 数据库字段大概如下: 复制代码 代码如下: id 编号 fid 父分类编号 class_name 分类名 path 分类路径,以 id 为节点,组成类似 ,1,2,3,4, 这样的字符串 可以假设有如下的数据: 复制代码 代码如下: id fid class_name path 1  0       分类1 ,       1, 2

python遍历目录的例子(不用递归)

 代码如下 复制代码 import os,stat class DirectoryStatWalker:     def __init__(self,directory):         self.stack=[directory]         self.files=[]         self.index=0     def __getitem__(self,index):         while 1:             try:                 file=s

不用递归实现php树程序代码

 代码如下 复制代码 /**  * 创建父节点树形数组  * 参数  * $ar 数组,邻接列表方式组织的数据  * $id 数组中作为主键的下标或关联键名  * $pid 数组中作为父键的下标或关联键名  * 返回 多维数组  **/ function find_parent($ar, $id='id', $pid='pid') {   foreach($ar as $v) $t[$v[$id]] = $v;   foreach ($t as $k => $item){     if( $it