当前位置: 首页 > news >正文

2018 php 面试

排序算法

快速排序

快速排序是十分常用的高效率的算法,其思想是:先选一个标尺,用它把整个队列过一遍筛选,以保证左边的元素都不大于它,其右边都不小于它

function quickSort($arr){
    //获取数组长度
    $length = count($arr);
    //判断长度是否需要继续二分比较
    if($length <= 1){
        return $arr
    }
    // 定义基准元素
    $base = $arr[0];
    //定义两个空数组,用于存放和基准元素比较后的结果
    $left = [];
    $right = [];
    //遍历数组
    for ($i=1;$i<$length;i++){
        //和基准元素作比较
        if ($arr[i] >$base){
            $right[] = $arr[$i];
        }else{
            $left[] = $arr[$i];
        }        
    }
    //然后递归分别处理left和right
    $left = quickSort($left);
    $right = quickSort($right);
    //合并
    return array_merge($left,[$base],$right) 
}

冒泡排序

思路:法如其名,就像冒泡一样,每次从数组中冒出一个最大的数。

比如:2,4,1

第一次冒出4:2,1,4

第二次冒出2:1,2,4

function    bubbleSort($arr){   
    // 获取数组长度
    $length = count($arr);    
    // 第一层循环控制冒泡轮次
    for($i=0; $i < $length-1; $i++) {     
    // 内层循环控制从第0个键值和后一个键值比较,每次冒出一个最大的数     
    for($k=0; $k < $length-$i; $k++) {         
        if($arr[$k] > $arr[$k+1]){
          $tmp = $arr[$k+1];
          $arr[$k+1] = $arr[$k];
          $arr[$k] = $tmp;
        }
      }
    }
    return    $arr;
  }

选择排序

思路:每次选择一个相应的元素,然后将其放到指定的位置

function selectSort($arr){
    //实现思路
    //双重循环完成,外层控制轮数,当前的最小值,内层控制比较次数
    //获取长度
    $length = count($arr);
    for($i=0;$i<$length-1;$i++){
        //假设最小值的位置
        $p = $i;
        //使用假设的最小值和其他值比较,找到当前的最小值
        for ($j=$i+1;$j<$length;$j++){
            //$arr[$p] 是已知的当前最小值
            //判断当前循环值和已知最小值的比较,当发下最小的值时记录下键,并进行下一次比较
            if($arr[$p]>$arr[$j]){
                $p = $j;//比假设的值更小
            }
        }
        //通过内部for循环找到了当前最小值的key,并保存在$p中
        //判断日光当前$p中的键和假设的最小值的键不一致增将其互换
        if ($p !=$i){
            $tmp = $arr[$p];
            $arr[$p] = $arr[$i];
            $arr[$i] = $tmp
        }
    }
    //返回最终结果
    return $arr
}

转载于:https://www.cnblogs.com/puqunzhu/p/9732750.html

相关文章:

  • 【网络文摘】一位36岁程序员的困惑
  • rabbitMQ 常用命令
  • Benefits of encapsulation
  • 【附node操作实例】redis简明入门系列—字符串类型
  • [译] 尤雨溪:Vue 3.0 计划
  • 接口使用
  • java中如何模拟真正的同时并发请求?
  • P3807 【模板】卢卡斯定理
  • windows server 2003 安全加固(一)
  • 算法-图和图算法
  • Totuial 01 java
  • Spring Vault 2.1 正式发布
  • 聊聊storm client的nimbus.seeds参数
  • 深入源码分析Java线程池的实现原理
  • 第15讲 | 深入区块链技术(七):哈希与加密算法
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • CSS中外联样式表代表的含义
  • Javascript设计模式学习之Observer(观察者)模式
  • JS函数式编程 数组部分风格 ES6版
  • js写一个简单的选项卡
  • js学习笔记
  • Netty 4.1 源代码学习:线程模型
  • Quartz初级教程
  • vue的全局变量和全局拦截请求器
  • 阿里研究院入选中国企业智库系统影响力榜
  • 解析 Webpack中import、require、按需加载的执行过程
  • 那些被忽略的 JavaScript 数组方法细节
  • 你不可错过的前端面试题(一)
  • 如何优雅地使用 Sublime Text
  • 网页视频流m3u8/ts视频下载
  • 栈实现走出迷宫(C++)
  • 大数据全解:定义、价值及挑战
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #define
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (04)odoo视图操作
  • (9)目标检测_SSD的原理
  • (Python第六天)文件处理
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)平衡树
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET的数据绑定
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • /3GB和/USERVA开关
  • @Autowired @Resource @Qualifier的区别