博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP面试题之算法解析
阅读量:6331 次
发布时间:2019-06-22

本文共 2364 字,大约阅读时间需要 7 分钟。

面试中经常被问到会什么算法,这里整合一些常见的算法及它们的实现原理.下面的例子都是经过测试可用的,如果有什么问题请告知!!

本人小白,如果有更好的实现方式,敬请赐教,感激不尽!!!!

冒泡排序,快速排序,选择排序,二分法查找,快速查找

/** * 冒泡排序* 相邻2数比较,小的在前,大的在后* 数组有几个元素,就要比较几轮 $i* 每轮需要比较的次数为,数组元素个数-已比较的次数 $j* @param   array  $array 要操作的数组* @return  array  $array 返回的数组*/function bubbleSort($array) { $cnt = count($array); for($i = 0; $i < $cnt ; $i++){ for($j = 0 ; $j < ($cnt-$i-1) ; $j++){ if($array[$j] > $array[$j+1]){ $temp = $array[$j]; $array[$j] = $array[$j+1]; $array[$j+1] = $temp; } } } return $array; }

 

/*** 快速排序* 递归实现* 获取数组第一个数,循环使后面的数与其比较,* 比其小的放在一个数组中,比其大的放在一个数组中* 将2个数组递归调用,直到最终数组元素小于等于1时,没有可以比较的元素* 通过array_merge函数,将比较的数组按大小顺序合并然后一层一层的return出去,最终实现从小到大排序* @param array $array 要操作的数组* @return array $array 返回的数组*/function quickSort($array){        if(count($array) <= 1 ) return $array;        $key = $array[0];        $left_arr = array();        $right_arr = array();        for ($i=1;$i

 

/*** 选择排序* 2层循环* 第一层逐个获取数组的值 $array[$i]* 第二次遍历整个数组与$array[$i]比较($j=$i+1已经比较的,不再比较,减少比较次数)* 如果比$array[$i]小,就交换位置* 这样一轮下来就可以得到数组中最小值* 以此内推整个外层循环下来就数组从小到大排序了* @param array $array 要比较的数组* @return array $array 从小到大排序后的数组*/function selectSort($array){        $cnt = count($array);        for($i=0;$i<$cnt;$i++){                for($j=($i+1);$j<$cnt;$j++){                        if($array[$i]>$array[$j]){                                $tmp = $array[$i];                                $array[$i] = $array[$j];                                $array[$j] = $tmp;                        }                }        }        return $array;}

 

/*** 二分法查找一个值在数组中的位置* @param array $array 操作的数组* @param void $val 要查找的值* @return int $mid 返回要查找的值在数组中的索引,如果不存在返回-1*/function binarySearch($array,$val){        $cnt = count($array);        $low = 0;        $high = $cnt - 1;        while ($low <= $high){                $mid = intval(($low + $high)/2);                if($array[$mid] == $val){                        return $mid;                }                if($array[$mid] < $val){                        $low = $mid + 1;                }                if($array[$mid] > $val){                        $high = $mid - 1;                }        }        return -1;}

 

/*** 顺序查找(最简单,效率低下)* 通过循环数组查找要的值* @param array $array 要操作的数组* @param void $val  要查找的值* @return int 如果存在,返回该值在数组中的索引,否则返回-1*/function seqSch($array,$val){        for($i=0;$i

 

转载于:https://www.cnblogs.com/CodeAnti/p/4866269.html

你可能感兴趣的文章
Linux 系统实时监控 —— Glances
查看>>
eclipse 当中,修改文本编辑框的字体大小
查看>>
NHibernate资料收集
查看>>
Javascript_备忘录2
查看>>
Redis 数据结构的底层实现 (二) dict skiplist intset
查看>>
C++_系列自学课程_第_4_课_string_《C++ Primer 第四版》
查看>>
elasticsearch之hello(spring data整合)
查看>>
spring mvc-REST
查看>>
Java反射机制
查看>>
Selenium Web 自动化 - 项目实战环境准备
查看>>
51Nod:1085 背包问题
查看>>
算法导论读书笔记-第十九章-斐波那契堆
查看>>
Nodepad++ 资料整理
查看>>
Mysql表大小数据大小索引大小查询
查看>>
CIE-LUV是什么颜色特征
查看>>
apache服务器安装配置启停[CentOS]
查看>>
StanFord ML 笔记 第四部分
查看>>
Number Sequence HDU - 1711 (Hash或KMP)
查看>>
Python爬虫实例:糗百
查看>>
【转】iOS:堆(heap)和栈(stack)的理解--简介
查看>>