前言下面的是通过PHP实现经典算法,并计算了耗时,可以通过耗时对比这几种算法的复杂度。插入排序冒泡排序选择排序并归排序快速排序CODE$arr = [];for ($i = 0; $i 5000; $i++) {$arr[] = rand(1, 10000); }//1 插入排序functioninsertionSort($arr) {for ($i = 1; $i $arr); $i++) {$tmp = $arr[$i]; //设置监视哨$key = $i - 1; //设置开始查找的位置while ($key >= 0 && $tmp $arr[$key]) { // 监视哨的值比查找的值小 并且 没有...
前言前几天,我们通过PHP实现了不同的排序算法,并比较算法对应的耗时。 【算法】PHP实现经典算法(上)下面我们来实现下列算法堆排序鸡尾酒排序直接选择排序计数排序CODE$arr = [];for ($i = 0; $i 5000; $i++) {$arr[] = rand(1, 50000); }// 5 堆排序/*** 交换两个数的位置* @param $a* @param $b*/functionswap(&$a,&$b){$temp = $b;$b = $a;$a = $temp; }/*** 左子树* @param $i* @return mixed*/functionlchild($i){return$i*...
本文实例讲述了PHP实现的线索二叉树及二叉树遍历方法。分享给大家供大家参考,具体如下:<?phprequire biTree.php;$str = ko#be8#tr####acy#####;$tree = new BiTree($str);$tree->createThreadTree();echo $tree->threadList() . "\n";从第一个结点开始遍历线索二叉树echo $tree->threadListReserv();从最后一个结点开始反向遍历 ?>biTree.php:<?/*** PHP实现二叉树** @author zhaojiangwei* @since 2011/10/25 10:32*///结点类c...
1$arr = [9, 43, 12, 0, 87, 1];2function merge_sort(&$arr){3 _merge_sort($arr, $arr, 0, count($arr) - 1);4}5 6function _merge_sort(&$s_arr, &$d_arr, $i, $j){7if($i > $j){8return;9 } 10if($i == $j){ 11echo aa; 12$d_arr[$i] = $s_arr[$i]; 13returnfalse; 14 } 15$tmp_arr = array(); 16$m = intval(($i + $j)/2); 17echo$m; 18if($i <= $m){ 19 _merge_sort($s_arr, $tmp_arr, $i, $m); 20 } 2...
代码 代码如下:/* * rc4加密算法 * $pwd 密钥 * $data 要加密的数据 */ function rc4 ($pwd, $data)//$pwd密钥 $data需加密字符串 { $key[] =""; $box[] =""; $pwd_length = strlen($pwd); $data_length = strlen($data); for ($i = 0; $i < 256; $i++) { $key[$i] = ord($pwd[$i % $pwd_length]); $box[$i] = $i; } for ($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $key[$i]) % 256; $tmp = $box[$i]; $box[$i] = $...
代码如下://作者:遥远的期待 //QQ:15624575 //算法分析:1、必须是整数序列、2、如果整个序列不全是负数,最大子序列的第一项必须是正数,否则最大子序列后面的数加起来再加上第一项的负数,其和肯定不是最大的;3、如果整个序列都是负数,那么最大子序列的和是0; //全负数序列很简单,不举例 $arr=array(4,-3,5,-2,-1,2,6,-2); function getmaxsum($arr){ $thissum=0; $maxsum=0; $start=0;//记录子序列的起始下标 $end=0;//记录...
代码如下:$arr = array(345,4,17,6,52,16,58,69,32,8,234); for($i=1;$i<count($arr);$i++){ for($j=count($arr)-1;$j>=$i;$j--){ if($arr[$j]<$arr[$j-1]){ $temp = $arr[$j-1]; $arr[$j-1] = $arr[$j]; $arr[$j] = $temp; } } } 基本概念冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1 个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续...
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。PHP代码实现(暂时实现添加节点、层次遍历节点,删除节点后续更新)<?phpclass Node{public $value;public $leftNode;public $rightNode;}/* 找到空节点 */ function findEmpytNode($node, $parent = null){if(empty($node->value)){return $node;}else{if(empty($node->leftNode->value)){...
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( $item[$pid] ){if( ! isset($t[$item[$pid]][parent][$item[$pid]]) )$t[$item[$id]][parent][$item[$pid]] =& $t...
有些数据我们不想被别人看到,想用别的字符串或者数字代替,伪装成不能识别的语句 这种只是针对单纯的一个或几个数据的加密操作。 我们现在来看一下这个代码,不需要引入类库,简单实现: //加密与解密 $id = base64_encode(99999); $name= base64_encode(ming); $deid = base64_decode($id); $dename= base64_decode($name); echo $id.----.$deid; echo ; echo $name.--...
下面分享一些最常见的算法,用PHP如何实现。1、冒泡排序function bubble_sort($arr) { $n=count($arr); for($i=0;$i<$n-1;$i++){ for($j=$i+1;$j<$n;$j++) { if($arr[$j]<$arr[$i]) { $temp=$arr[$i]; $arr[$i]=$arr[$j]; $arr[$j]=$temp; } } } return $arr;} 2、归并排序function Merge(&$arr, $left, $mid, $right) { $i = $le...
<?php // 冒泡排序 function BubbleSort($arr) {// 获得数组总长度$num = count($arr);// 正向遍历数组for ($i = 1; $i < $num; $i++) {// 反向遍历for ($j = $num - 1; $j >= $i ; $j--) {// 相邻两个数比较if ($arr[$j] < $arr[$j-1]) {// 暂存较小的数$iTemp = $arr[$j-1];// 把较大的放前面$arr[$j-1] = $arr[$j];// 较小的放后面$arr[$j] = $iTemp;}}}return $arr; }// 交换法排序 function ExchangeSort($arr){$num = count(...
PHP快速排序小例子 php快速排序实现方法 完整代码:set_time_limit(0); function quickSort($arr) { if (count($arr) > 1) { // 只判断数组长度大于1的情况 $k = $arr[0]; // 默认参照对象为数组第一个对象 $x = array(); // 比参照小的 $y = array(); // 比参照大的 $_size = count($arr); for ($i = 1; $i if ($arr[$i] $x[] = $arr[$i]; ...
此算法的解密方法是重新加密一次,便可还原。。 /* * rc4加密算法 * $pwd 密钥 * $data 要加密的数据 */ function rc4 ($pwd, $data)//$pwd密钥 $data需加密字符串 { $key[] =""; $box[] =""; $pwd_length = strlen($pwd); $data_length = strlen($data); for ($i = 0; $i < 256; $i++) { $key[$i] = ord($pwd[$i % $pwd_length]); $box[$i] = $i; } for ($j = $i = 0; $i < 256; $i++) { $j = ($j + $...
之学习php的时候不敢往算法上靠近。就是怕扰乱自己的思想,现在回顾一下也还真的就那一回事。嘿嘿!各位有没有遇到这样子的情况呢?哈 <?php#冒泡排序法$arr = array(12,45,89,3,24,55,223,76,22,11,89,2,4,5,28,112,20,434,23,65,65,765,6,8,23,5,33,553,45,423,64,77,84,23);$tmp;for($i=0;$i<count($arr)-1;$i++ ){ for($j=0;$j<count($arr)-1-$i;$j++){ if($arr[$j] > $arr[$j+1]){ $tmp = $a...