排序算法

快速排序

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

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
}

2018 php 面试的更多相关文章

  1. (转)喜马拉雅2018 Java面试题目

    背景:将网上的题目整理下. java基础 1:hashTable hashMap ConcurrentHashMap 的区别.数据结构.线程安全 2:equals和==区别, 重写equals一定要重 ...

  2. 2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文

    2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文:https://juejin.im/post/5b94d8965188255c5a0cdc02

  3. 2018跳槽面试必备之深入理解 Java 多线程核心知识

    导语:多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲.在平时工作中如若使用不当会出现数据错乱.执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线 ...

  4. 2018年初面试Java(1.5年经验)

    xml文档如何解析 控制反转如何实现 http://www.cnblogs.com/qf123/p/8602972.html struts2和springmvc的区别 http://www.cnblo ...

  5. weak看iOS面试

    2013年 面试官:代理用weak还是strong? 我 :weak . 面试官:明天来上班吧 2014年 面试官:代理为什么用weak不用strong? 我 : 用strong会造成循环引用. 面试 ...

  6. [找工作] 2019秋招|从春招到秋招,Java岗经验总结(收获AT)

    转自(有更多) https://blog.csdn.net/zj15527620802/article/month/2018/10 前言 找工作是一件辛酸而又难忘的历程.经历过焦虑.等待.希望,我们最 ...

  7. Android 目前最稳定和高效的UI适配方案

    Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解.刚好,近期准备对糗事百科Android客户端设计 ...

  8. Android 文章合集 200+ 篇

    code小生 一个专注大前端领域的技术平台 公众号回复Android加入安卓技术群 镇楼 2017 文章合集 2017 年度文章分类整理 下面是 2018 年公众号所发表的文章分类整理 面经 一年经验 ...

  9. 2018 年 3 月 iOS 面试总结(上市公司,BAT)

    序言: 今年2月中下旬因为个人原因,换了一份工作,3月初期间面试了有3,4家,基本都是D轮或者刚刚上市的公司,也有上榜的BAT,也从他们的面试笔试中看到了自己的一些不足,于是就想写出来和大家分享一下, ...

随机推荐

  1. Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵进阶实战

    Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵进阶实战 在阅读本文前,建议先阅读<Spring Cloud Alibaba | Sentinel:分布式系 ...

  2. IDEA中输出syso的快捷键设置

    1. 2. 3. 4. 5.上图中的第三步会出现警告,那个红色的字,点击Define,选择Java 6.之后点击Apply和OK即可

  3. ViewGroup和View

    ViewGroup本身表示容器, 他是View的一个抽象子类, 它可以包含很多个普通的view组件,另外它还可以包含一个ViewGroup容器. 由于它是一个抽象类,所以实际使用中通常使用viewGr ...

  4. .Net基础篇_学习笔记_第五天_流程控制while循环002

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. hbase 修复 hbase hbck

    hbase hbck 新版本的 hbck 可以修复各种错误,修复选项是: (1)-fix,向下兼容用,被-fixAssignments替代 (2)-fixAssignments,用于修复region ...

  6. 【学习笔记】第八章 python3核心技术与实践--条件与循环

    [第七章]思考题答案,仅供参考:

  7. 简单的Socket通信(简单的在线聊天)---winform

    注:本博客适合刚开始学习winform程序的初学者,大牛请绕道(跪求大牛指导文中不足) .....10w字废话自动省略,直接开始正题. 首先从最基本的建立winform开始(本项目用的Vs2017) ...

  8. Metasploit工具----漏洞利用模块

    漏洞利用是指由渗透测试者利用一个系统.应用或者服务中的安全漏洞进行的攻击行为.流行的渗透攻击技术包括缓冲区溢出.Web应用程序攻击,以及利用配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的 ...

  9. [Design Patterns] 01. Creational Patterns - Abstract Factory

    设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式的目的是提高代码的可重用性,让代码更容易被他人理解,并保证代码可靠性.它是代码编制真正实现工程化. 四个关键元素 ...

  10. [Spark] 05 - Spark SQL

    关于Spark SQL,首先会想到一个问题:Apache Hive vs Apache Spark SQL – 13 Amazing Differences Hive has been known t ...