1.顺序查找

思路分析: 从数组的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功;如果到最后一个元素仍没有目标元素,则查找失败。

代码实现

<?php
function search($arr,$k){
     $n = count($arr);
$arr[$n]= $k;
for($i=0; $i<$n; $i++){
if($arr[$i]==$k){
break;
}
}
if ($i<$n){
return $i;
}else{
return -1;
}
}

2.二分查找

思路分析:先取数组中间的值floor((low+top)/2), 然后通过与所需查找的数字进行比较,若比中间值大,则将首值替换为中间位置下一个位置,继续第一步的操作;若比中间值小,则将尾值替换为中间位置上一个位置,继续第一步操作 ,重复第二步操作直至找出目标数字。

代码实现

//    非递归
// $target是要查找的目标 $arr是已经排序好的数组
function binary(&$arr,$low,$top,$target){
while($low <= $top){
//由于php取商是有小数的,所以向下取整,不过也可不加,数组也会取整
$mid = floor(($low+$top)/2);
echo $mid."<br>";
if($arr[$mid]==$target){
return $arr[$mid];
}elseif($arr[$mid]<$target){
$low = $mid+1;
}else{
$top = $mid-1;
}
}
return -1;
}
//    递归
function binaryRecursive($arr,$low,$top,$target){
if($low<=$top){
$mid = floor(($low+$top)/2);
if($arr[$mid]==$target){
return $arr[$mid];
}elseif($arr[$mid]<$target){
return binaryRecursive($arr,$mid+1,$top,$target);
}else{
return binaryRecursive($arr,$low,$top-1,$target);
}
}else{
return -1;
}
}

3.写一个二维数组排序算法函数,可以调用php内置函数,能够具有通用性。

代码实现

function array_sort($arr, $keys, $order=0) {
if (!is_array($arr)) {
return false;
}
$keysvalue = array();
foreach($arr as $key => $val) {
$keysvalue[$key] = $val[$keys];
}
if($order == 0){
asort($keysvalue);
}else {
arsort($keysvalue);
}
reset($keysvalue);
foreach($keysvalue as $key => $vals) {
$keysort[$key] = $key;
}
$new_array = array();
foreach($keysort as $key => $val) {
$new_array[$key] = $arr[$val];
}
return $new_array;
}

4.写一个函数,能够遍历一个文件下的所有文件和子文件夹

代码实现

<?php
function my_scandir($dir){
$files = array();
if($handle = opendir($dir)) {
while (($file = readdir($handle))!== false) {
if($file != '..' && $file != '.') {
if(is_dir($dir."/".$file)){
$files[$file]=my_scandir($dir."/".$file);
}else{
$files[] = $file;
}
}
} closedir($handle);
return $files;
}
}

5.归并排序

代码实现

function Merge(&$arr, $left, $mid, $right) {
$i = $left;
$j = $mid + 1;
$k = 0;
$temp = array();
while ($i <= $mid && $j <= $right)
{
if ($arr[$i] <= $arr[$j])
$temp[$k++] = $arr[$i++];
else
$temp[$k++] = $arr[$j++];
}
while ($i <= $mid)
$temp[$k++] = $arr[$i++];
while ($j <= $right)
$temp[$k++] = $arr[$j++];
for ($i = $left, $j = 0; $i <= $right; $i++, $j++)
$arr[$i] = $temp[$j];
} function MergeSort(&$arr, $left, $right)
{
if ($left < $right)
{
$mid = floor(($left + $right) / 2);
MergeSort($arr, $left, $mid);
MergeSort($arr, $mid + 1, $right);
Merge($arr, $left, $mid, $right);
}
}

还有部分其他类型的算法面试题参考:

1.http://blog.csdn.net/caleng/article/details/5276403

2.http://www.cnblogs.com/jackluo/p/3139770.html

部分摘自网络 ,待验证。

PHP常见算法-面试篇(2)的更多相关文章

  1. PHP常见算法-面试篇(1)

    1.冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将 ...

  2. [转帖]java架构之路-(面试篇)JVM虚拟机面试大全

    java架构之路-(面试篇)JVM虚拟机面试大全 https://www.cnblogs.com/cxiaocai/p/11634918.html   下文连接比较多啊,都是我过整理的博客,很多答案都 ...

  3. Hadoop学习笔记—12.MapReduce中的常见算法

    一.MapReduce中有哪些常见算法 (1)经典之王:单词计数 这个是MapReduce的经典案例,经典的不能再经典了! (2)数据去重 "数据去重"主要是为了掌握和利用并行化思 ...

  4. [Machine Learning] 机器学习常见算法分类汇总

    声明:本篇博文根据http://www.ctocio.com/hotnews/15919.html整理,原作者张萌,尊重原创. 机器学习无疑是当前数据分析领域的一个热点内容.很多人在平时的工作中都或多 ...

  5. 常见算法是js实现汇总(转载)

    常见算法是js实现汇总 /*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.len ...

  6. SQL点滴26—常见T-SQL面试解析

    原文:SQL点滴26-常见T-SQL面试解析 它山之石可以攻玉,这一篇是读别人的博客后写下的,不是原原本本的转载,加入了自己的分析过程和演练.sql语句可以解决很多的复杂业务,避免过多的项目代码,下面 ...

  7. 【面试篇】寒冬求职季之你必须要懂的原生JS(中)

    互联网寒冬之际,各大公司都缩减了HC,甚至是采取了“裁员”措施,在这样的大环境之下,想要获得一份更好的工作,必然需要付出更多的努力. 一年前,也许你搞清楚闭包,this,原型链,就能获得认可.但是现在 ...

  8. 数据结构+算法面试100题~~~摘自CSDN

    数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...

  9. 字符串匹配常见算法(BF,RK,KMP,BM,Sunday)

    今日了解了一下字符串匹配的各种方法. 并对sundaysearch算法实现并且单元. 字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目.此算法通常输入为原字符串(strin ...

随机推荐

  1. android125 zhihuibeijing 缓存

    ## 三级缓存 ## - 内存缓存, 优先加载, 速度最快 - 本地缓存(内存卡), 次优先加载, 速度快 - 网络缓存, 不优先加载, 速度慢,浪费流量 package com.itheima.zh ...

  2. 实例源码--Android日历实例源码

      下载源码   技术要点: 1.Android基础控件的使用 2.Android应用开发基础框架 3.源码带有非常详细的中文 注释 ...... 详细介绍: 1. Android应用开 发技术 此套 ...

  3. java_泛型 TreeSet 判断hashcode/length(升序排列)

    package ming; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; ...

  4. c++ 模运算

    在数学里,"模运算"也叫"求余运算",用mod来表示模运算. 对于 a mod b 可以表示为 a = q(商)*b(模数) + r(余数),其中q表示商,b表 ...

  5. 梭子鱼:APT攻击是一盘更大的棋吗?

    随着企业对IT的依赖越来越强,APT攻击可能会成为一种恶意打击竞争对手的手段.目前,APT攻击目标主要有政治和经济目的两大类.而出于经济目的而进行的APT攻击可以获取竞争对手的商业信息,也可使用竞争对 ...

  6. 微信、微博、qq图标服务实现

    实现原理:变化前的图标和变化后的图标在一张图片上,用这张图片作为背景,通过定义背景的位置来实现显示哪个图标,其中还带着滑动的动画效果. <!DOCTYPE html> <html l ...

  7. #291 div.2

    A.水题 数字翻转,将每一位大于等于5的数字t翻转成9-t,注意不要有前导0,且翻转后数字的位数不变(即9999->9000...刚开始以为应该翻转成0了= =) #include<ios ...

  8. Css字体中英文对照表

    css字体中文.英文.Unicode名对照表 另外注意:繁体中文字体名,在简体中文系统中是不能被识别的. 中文名 英文名 Unicode Unicode 2 Mac OS 华文细黑 STHeiti L ...

  9. SQL*PLUS中批量执行SQL语句

    SQL*PLUS中批量执行SQL语句 今天由于工作的需要,要在CMD中批量执行大量的SQL语句,对于Oracle学习还处在入门阶段的我,只能硬着头皮到处去寻找资料(主要是网络资料,也包括自己的电子书) ...

  10. Java _Map接口的使用(转载)

    转载自:http://blog.csdn.net/tomholmes7/article/details/2663379.转载请注明原作者地址 Map Map以按键/数值对的形式存储数据,和数组非常相似 ...