算法
-
排序算法--冒泡排序
算法冒泡的原理:两两交换数值,最小的值在最左边,就如最轻的气泡在最上边。 原理图: 实例题目:让数组$arr=array(11,3,2,5,8,7,22,33,14)从大到小排列,请使用冒泡排序 <?php //冒泡排序 $arr=array(11,3,2,5,8,7,22,33,14); //从大到小 $len = count($arr); for ($i=0; $i < $len; $i++) { for ($j=$i; $j < $len; $j++) { if($arr[$i] <= $arr[$j]){ $temp = $arr[$j]; $arr[$j] = $arr[$i]; $arr[$i] = $temp; } } }; echo "<pre>"; var_dump($arr); echo "</pre>"; ?> 运行结果 array(9) { [0]=> int(33) [1]=> int(22) [2]=> int(14) [3]=> int(11) [4]=> int(8) [5]=> int(7) [6]=> int(5) [7]=> int(3) [8]=> int(2) }
阅读更多admin2019-04-29 18:08:05【算法】
-
排序算法--选择排序
算法原理:它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 原理图: 实例题目:让数组$arr=array(11,3,2,5,8,7,22,33,14)从大到小排列,请使用选择排序 <?php // 选择排序 $arr=array(11,3,2,5,8,7,22,33,14); //从大到小 $len = count($arr); for ($i=0; $i < $len ; $i++) { $max = $arr[$i]; $wz = $i; for ($j=$i+1; $j < $len; $j++) { if($max <= $arr[$j]){ $max = $arr[$j]; $wz = $j; } } // 换位置 if($wz != $i){ $temp = $arr[$i]; $arr[$i] = $max; $arr[$wz] = $temp; } } echo "<pre>"; var_dump($arr); echo "</pre>"; ?> 运行结果 array(9) { [0]=> int(33) [1]=> int(22) [2]=> int(14) [3]=> int(11) [4]=> int(8) [5]=> int(7) [6]=> int(5) [7]=> int(3) [8]=> int(2) }
阅读更多admin2019-04-29 18:07:49【算法】
-
遍历一个文件夹下所有文件和子文件夹
算法使用函数详解 opendir() 函数打开一个目录句柄,可由 closedir(),readdir() 和 rewinddir() 使用。 is_dir() 函数检查指定的文件是否是目录。 readdir() 函数返回由 opendir() 打开的目录句柄中的条目。 运行代码 <?php function my_dir($dir) { $files = array(); if(@$handle = opendir($dir)) { while(($file = readdir($handle)) !== false) { if($file != ".." && $file != ".") { if(is_dir($dir."/".$file)) { //递归字文件夹 $files[$file] = my_dir($dir."/".$file); } else { //不然就将文件的名字存入数组; $files[] = $file; } } } closedir($handle); return $files; } } echo "<pre>"; var_dump(my_dir("../")); echo "</pre>"; ?> 运行结果 array(3) { ["file"]=> array(1) { [0]=> string(9) "index.php" } ["maopao"]=> array(1) { [0]=> string(9) "index.php" } ["xuanze"]=> array(1) { [0]=> string(9) "index.php" } }
阅读更多admin2019-04-29 18:07:28【算法】
-
用PHP实现一个双向队列类
算法array_unshift() 函数用于向数组插入新元素。新数组的值将被插入到数组的开头。 array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。 array_shift() 函数删除数组中第一个元素,并返回被删除元素的值。 array_pop() 函数删除数组中的最后一个元素。返回数组的最后一个值。如果数组是空的,或者非数组,将返回 NULL。 运行代码: <?php header("Content-type: text/html; charset=utf-8"); function dump($res){ echo "<pre>"; var_dump($res); echo "</pre>"; } //双向队列类 class Deque{ public $queue; public function __construct($data=array()){ $this->queue = $data; } public function addFirst($item){ return array_unshift($this->queue,$item); } public function addLast($item){ return array_push($this->queue,$item); } public function removeFirst(){ return array_shift($this->queue); } public function removeLast(){ return array_pop($this->queue); } } // test $arr = array( "1",'4','2' ); $obj = new Deque($arr); echo "从头部插入<br/>"; $res = $obj->addFirst("3"); dump($obj->queue); // 从尾部插入 echo "从尾部插入<br/>"; $res = $obj->addLast("5"); dump($obj->queue); // 从头部删除,返回删除的元素 echo "从头部删除,返回删除的元素<br/>"; $res = $obj->removeFirst(); dump($res); // 从尾部删除,返回删除的元素 echo "从尾部删除,返回删除的元素<br/>"; $res = $obj->removeLast(); dump($res); echo "--------------------------<br/>"; dump($obj->queue); ?> 运行结果 从头部插入 array(4) { [0]=> string(1) "3" [1]=> string(1) "1" [2]=> string(1) "4" [3]=> string(1) "2" } 从尾部插入 array(5) { [0]=> string(1) "3" [1]=> string(1) "1" [2]=> string(1) "4" [3]=> string(1) "2" [4]=> string(1) "5" } 从头部删除,返回删除的元素 string(1) "3" 从尾部删除,返回删除的元素 string(1) "5" -------------------------- array(3) { [0]=> string(1) "1" [1]=> string(1) "4" [2]=> string(1) "2" }
阅读更多admin2019-04-29 18:07:12【算法】
-
二分查找
算法原理:假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 代码实例 <?php // 二分查找 header("Content-type: text/html; charset=utf-8"); function dump($res){ echo "<pre>"; var_dump($res); echo "</pre>"; } function findval($arr,$key,$first,$last){ if($first<=$last){ $mid = intval(($last+$first)/2); if($arr[$mid] == $key){ return $mid; } if($arr[$mid] > $key){ return findval($arr,$key,$first,$mid-1); } if($arr[$mid] < $key){ return findval($arr,$key,$mid+1,$last); } }else{ return false; } } // 升序的数组 $arr=array(1,2,4,5,6,7,8,9,11,12,15,16,17,22,44,45,66); $val = findval($arr,6,0,count($arr)); dump($val); ?> 运行结果 int(4)
阅读更多admin2019-04-29 18:06:53【算法】
站点信息
- 建站时间:2019-3-10
- 网站程序:ThinkPHP PHP MYsql
- 路由说明:全站静态化+api
- 统计数据:百度统计
- 登陆方式:githua授权登陆
- 个人邮箱:2584496361@qq.com
- 个人Q Q:2584496361
- 业务咨询:有需要建站朋友欢迎咨询