这些都是真实的IT公司招聘PHP程序员的面试题,这些都是简单的基本算法。包括:冒泡算法、快速排序算法、二分查找算法、顺序算法。

冒泡排序,对象可以是一个数组

01 function bubble_sort($array){
02     $count = count($array);
03     if ($count <= 0) {
04         return false;
05     }
06     for($i=0; $i<$count; $i++){
07         for($j=$count-1; $j>$i; $j--){
08             if ($array[$j] < $array[$j-1]){
09                 $tmp = $array[$j];
10                 $array[$j] = $array[$j-1];
11                 $array[$j-1] = $tmp;
12             }
13         }
14     }
15     return $array;
16 }

快速排序,对象可以是一个数组

01 function quick_sort($array) {
02     if (count($array) <= 1){
03         return $array;
04     }
05     $key = $array[0];
06     $left_arr = array();
07     $right_arr = array();
08     for ($i=1; $i<count($array); $i++){
09         if ($array[$i] <= $key){
10             $left_arr[] = $array[$i];
11         }else{
12             $right_arr[] = $array[$i];
13         }
14     }
15     $left_arr = quick_sort($left_arr);
16     $right_arr = quick_sort($right_arr);
17     return array_merge($left_arr, array($key), $right_arr);
18 }

二分查找

01 //使用二分查找数组中某个元素
02 function bin_sch($array, $low, $high, $k){
03     if ($low <= $high){
04         $mid = intval(($low+$high)/2);
05         if ($array[$mid] == $k){
06             return $mid;
07         }elseif ($k < $array[$mid]){
08             return bin_sch($array, $low, $mid-1, $k);
09         }else{
10             return bin_sch($array, $mid+1, $high, $k);
11         }
12     }
13     return -1;
14 }

顺序查找

01 //顺序查找数组中某个元素
02 function seq_sch($array, $n, $k){
03     $array[$n] = $k;
04     for($i=0; $i<$n; $i++){
05         if($array[$i]==$k){
06             break;
07         }
08     }
09     if ($i<$n){
10         return $i;
11     }else{
12         return -1;
13     }
14 }

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

01 function array_sort($arr, $keys, $order=0) {
02     if (!is_array($arr)) {
03         return false;
04     }
05     $keysvalue = array();
06     foreach($arr as $key => $val) {
07         $keysvalue[$key] = $val[$keys];
08     }
09     if($order == 0){
10         asort($keysvalue);
11     }else {
12         arsort($keysvalue);
13     }
14     reset($keysvalue);
15     foreach($keysvalue as $key => $vals) {
16         $keysort[$key] = $key;
17     }
18     $new_array = array();
19     foreach($keysort as $key => $val) {
20         $new_array[$key] = $arr[$val];
21     }
22     return $new_array;
23 }

原文地址:http://www.springload.cn/springload/detail/326

 

php面试常用算法的更多相关文章

  1. 面试常用算法——Longest Palindromic Substring(最长回文子串)

    第一种: public static void main(String[] args) { String s = "abcbaaaaabcdcba"; int n,m; Strin ...

  2. 面试常用算法总结——排序算法(java版)

    排序算法 重要性不言而喻,很多算法问题往往选择一个好的排序算法往往问题可以迎刃而解 1.冒泡算法 冒泡排序(Bubble Sort)也是一种简单直观的排序算法.它重复地走访过要排序的数列,一次比较两个 ...

  3. PHP面试常用算法(推荐)

    一.冒泡排序 基本思想: 对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换.这样比较小(大)的数值就将逐渐从后面向前面移动. ...

  4. Java && Python 算法面试常用类以及方法总结

    数据结构 逻辑结构上: 包括集合,线性结构,非线性结构. 存储结构: 顺序存储,链式存储,索引存储,散列存储. Java 常见数据结构 大专栏  Java && Python 算法面试 ...

  5. 编程之法:面试和算法心得(字符串包含java实现)

    内容全部来自编程之法:面试和算法心得一书,实现是自己写的使用的是java 题目描述 给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短.请问,如何最快地判断字符串B中所有字母是否都 ...

  6. PHP版常用算法

    PHP版常用算法最近准备面试的资料,顺便整理一下以前的基本算法,写个DEMO记录一下 //冒泡//逐行对比,满足条件则交换function bubbleSort($arrData,$sort = 'd ...

  7. 总结Objective-c常用算法

          今天是星期天,想睡到10点起床,结果认为自己太奢侈了,不能这么做,于是把闹钟设置成了6:30:结果终于9:36醒了,起床,无缘无故迟了,好吧,就算太累了吧,周天就原谅自己一回.终于到了中午 ...

  8. Atitit 编程语言常用算法attilax总结

    Atitit 编程语言常用算法attilax总结 1. 编译算法分类and   数据操作算法.1 1.1. Tab driver stat  状态转换表格算法1 1.2. Nest case 词法分析 ...

  9. GJM : 数据结构 - 轻松看懂机器学习十大常用算法 [转载]

     转载请联系原文作者 需要获得授权,非法转载 原文作者将享受侵权诉讼 文/不会停的蜗牛(简书作者)原文链接:http://www.jianshu.com/p/55a67c12d3e9 通过本篇文章可以 ...

随机推荐

  1. 理解$watch ,$apply 和 $digest --- 理解数据绑定过程

    原文地址:http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/ 注 这篇博文主要是写给新手的,是给那些刚刚开始 ...

  2. ejabberd中的http反向推送

    http的反向推送通常使用"长轮询"或"长连接"的方式. 所谓"长轮询"是指客户端发送请求给服务器,服务器发现没有数据需要发送给客户端. h ...

  3. The type or namespace name '****' could not be found (are you missing a using directive or an assembly reference

    错误的提升内容:

  4. 《深入Java虚拟机学习笔记》- 第10章 栈和局部变量操作

    Java栈和局部变量操作 Java虚拟机是基于栈的机器,几乎所有Java虚拟机的指令都与操作数栈相关.栈操作包括把常量压入操作数栈.执行通用的栈操作.在操作数栈和局部变量之间往返传输值. 1常量入栈操 ...

  5. DDraw绘图

    微软已经提供了GDI+绘图方式,但是GDI+绘图较慢,另外微软提供了效率更高的DirectDraw绘图方式.DirectDraw提供硬件加速功能. 首先需要确保电脑上的Ddraw硬件加速功能已经打开, ...

  6. 笔记:1.css样式,最前边加 @charset "utf-8";是为什么2.js判断各种浏览器的方法

    表明CSS文件的页面编码为UTF-8..如果这个CSS的文件编码也是UTF-8的话..那么在浏览器中看到的CSS文件的页面中中文的注释或者中文字体就可以正确显示为中文,如果CSS的文件编码和页面不一致 ...

  7. leetcode@ [79/140] Trie树应用 Word Search / Word Search II

    https://leetcode.com/problems/word-search/ class Solution { public: struct Trie{ Trie *next[]; bool ...

  8. sqlserver 出现 因为文件组 'PRIMARY' 已满 的解决办法 有可能是磁盘剩余空间不足 导致的

    一般虚拟主机提供商是通过限制数据库文件的大小来实现提供定制的数据库空间的.当你把从虚拟数据库空间备份下来的文件恢复到自己的服务器上时,这个限制还是存在的.找到数据库文件 给增加个数据文件就好了 解决办 ...

  9. Java HashMap实例源码分析

    引言 HashMap在键值对存储中被经常使用,那么它到底是如何实现键值存储的呢? 一 Entry Entry是Map接口中的一个内部接口,它是实现键值对存储关键.在HashMap中,有Entry的实现 ...

  10. SQL2008-查询库中是否存在某表

    select   *   from   sysobjects   where   name= 'N201111B'   and   xtype= 'U'