排序算法

1. 冒泡排序(数组排序)

  基本思想:对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换。这样每遍历一次,最小的数值就会被放置到数组的前面。

  1. function bubble_sort($array) {
  2. $count = count($array);
  3. if ($count <= 0) {
  4. return false;
  5. }
  6. for ($i = 0; $i < $count; $i++) {
  7. // 内部没遍历一次 被遍历元素中最小的元素被放置到前面
  8. // 内部每次遍历元素的个数是之前一次的 -1
  9. for ($j = $count - 1; $j > $i; $j--) {
  10. if ($array[$j] < $array[$j - 1]) {
  11. $temp = $array[$j];
  12. $array[$j] = $array[$j - 1];
  13. $array[$j - 1] = $temp;
  14. }
  15. }
  16. }
  17. return $array;
  18. }

2. 快速排序

  基本思想:在数组中挑出一个元素(多为第一个)作为标尺,扫描一遍数组将比标尺小的元素排在标尺之前,将所有比标尺大的元素排在标尺之后,通过递归将各子序列分别划分为更小的序列直到所有的序列顺序一致

  1. function quick_sort($arr)
  2. {
  3. //先判断是否需要继续进行
  4. $length = count($arr);
  5. if ($length <= 1) {
  6. return $arr;
  7. }
  8.  
  9. $base_num = $arr[0]; //选择一个标尺 选择第一个元素
  10.  
  11. //初始化两个数组
  12. $left_array = array(); //小于标尺的
  13. $right_array = array(); //大于标尺的
  14. for ($i = 1; $i < $length; $i++) {
  15. //遍历 除了标尺外的所有元素,按照大小关系放入两个数组内
  16. if ($base_num > $arr[$i]) {
  17. //放入左边数组
  18. $left_array[] = $arr[$i];
  19. } else {
  20. //放入右边
  21. $right_array[] = $arr[$i];
  22. }
  23. }
  24. //再分别对 左边 和 右边的数组进行相同的排序处理方式
  25. //递归调用这个函数,并记录结果
  26. $left_array = quick_sort($left_array);
  27. $right_array = quick_sort($right_array);
  28. //合并左边 标尺 右边
  29. return array_merge($left_array, array($base_num), $right_array);
  30. }

3. 选择算法

  基本思想:每次遍历选出最小的数,放在最前面

  1. function SelectSort($arr) {
  2. $length = count($arr);
  3. if ($length <= 1) {
  4. return $arr;
  5. }
  6. for ($i = 0; $i < $length; $i++) {
  7. $min = $i;
  8. for ($j = $i + 1; $j < $length; $j++) {
  9. // 选出当前循环中最小数的索引 赋值给$min
  10. if ($arr[$j] < $arr[$min]) {
  11. $min = $j;
  12. }
  13. }
  14. if ($i != $min) {
  15. //如果最小数不是$i 则交换位置
  16. $tmp = $arr[$i];
  17. $arr[$i] = $arr[$min];
  18. $arr[$min] = $tmp;
  19. }
  20. }
  21. return $arr;
  22. }

<面试> PHP 常见算法的更多相关文章

  1. JavaScript 面试中常见算法问题详解

    1.阐述下 JavaScript 中的变量提升 所谓提升,顾名思义即是 JavaScript 会将所有的声明提升到当前作用域的顶部.这也就意味着我们可以在某个变量声明前就使用该变量,不过虽然 Java ...

  2. 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...

  3. [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...

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

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

  5. 常见算法(logistic回归,随机森林,GBDT和xgboost)

    常见算法(logistic回归,随机森林,GBDT和xgboost) 9.25r早上面网易数据挖掘工程师岗位,第一次面数据挖掘的岗位,只想着能够去多准备一些,体验面这个岗位的感觉,虽然最好心有不甘告终 ...

  6. web前端工程师面试技巧 常见问题解答

    web前端工程师面试技巧 常见问题解答 每年的春招是各企业需求人才的黄金时期,不少的前端大牛或者前端新手在面试时候不知道怎么来回答面试官的问题,下面来看下我转载的这篇文章吧,希望对从事前端工作的你有所 ...

  7. 常见算法合集[java源码+持续更新中...]

    一.引子 本文搜集从各种资源上搜集高频面试算法,慢慢填充...每个算法都亲测可运行,原理有注释.Talk is cheap,show me the code! 走你~ 二.常见算法 2.1 判断单向链 ...

  8. leetcode常见算法与数据结构汇总

    leetcode刷题之后,很多问题老是记忆不深刻,因此特意开此帖: 一.对做过题目的总结: 二.对一些方法精妙未能领会透彻的代码汇总,进行时常学习: 三.总结面试笔试常见题目,并讨论最优解法及各种解法 ...

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

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

随机推荐

  1. STL中erase()的用法

    erase()是STL提供的容器中比较常用的方法之一,它的功能是删除容器中的某些元素,其中它的函数原型如下: 1.有两个参数,且参数类型都是size_t型: string& erase ( s ...

  2. C++进阶--代码复用 继承vs组合

    //############################################################################ /* * 代码复用: 继承 vs 组合 * ...

  3. java翻转字符串中的单词

    效果: 输入: "java and python" 输出: "avaj dna nohtyp" 代码: 版本1: 不考虑字符串开头有空格,单词间有多个空格空格的 ...

  4. 数据库SQL语言学习--上机练习2(连接查询 嵌套查询)

    上机练习2 1.              启动SQL Server 2008中的 SQL Server Management Studio. 2.              针对下面三张基本表进行操 ...

  5. CentOS搭建SVN服务器,并通过Apache HTTP方式访问

    摘要:本文主要讲述了在centos 6.5环境下搭建svn服务器,可通过svn:\\IP方式访问.同时由于部分公司内网端口限制,并不能访问外网的svn服务器,所以特地结合了apache服务器,使得可以 ...

  6. mysql 8.0 错误The server requested authentication method unknown to the client

    mysql 安装了最新版本8.0.11后创建用户并授权后,授权的用户连接数据库提示 The server requested authentication method unknown to the ...

  7. Android点赞音效播放

    /** * 音效播放 */ private SoundPool mPool; /** * 音效id */ private int voiceID; voiceID = initSoundPool(); ...

  8. MySQL常用语句大全

    数据库操作:创建数据库create database database_name 查看数据库 show databases使用数据库use dbname删除数据库 drop database dbna ...

  9. BCGcontrolBar(三) 添加表格(Grid)组件

    表格组件和图表组件是BCG的亮点之一 如下图 BCG有众多的表格样式可供选择 下图是插入基本表格组件后的效果 首先在程序中添加 BasicGridCtrl.h BasicGridCtrl.cpp 因为 ...

  10. adversarial example研究

    Paper: Practical Black-Box Attacks against Machine Learning 一.介绍 概况:Ian Goodfellow大神研究如何在不知道model内部结 ...