PHP各种常见经典算法总结【排序、查找、翻转等】


Posted in PHP onAugust 05, 2019

本文实例讲述了PHP各种常见经典算法。分享给大家供大家参考,具体如下:

冒泡排序算法

public function test() {
    $arr = array(43, 54, 62, 21, 66, 32, 78, 36, 76, 39);
    var_dump($arr);
    echo '<br/>';
    $arr = $this->bubbleSort($arr);
    var_dump($arr);
}
public function bubbleSort($arr) {
    $len = count($arr);
    //该层循环控制 需要冒泡的轮数
    for ($i = 1; $i < $len; $i++) {
      //该层循环用来控制每轮 冒出一个数 需要比较的次数
      for ($k = 0; $k < $len - $i; $k++) {
        if ($arr[$k] > $arr[$k + 1]) {
          $tmp = $arr[$k + 1]; // 声明一个临时变量
          $arr[$k + 1] = $arr[$k];
          $arr[$k] = $tmp;
        }
      }
    }
    return $arr;
}

快速排序

public function quick_sort($arr) {
    //先判断是否需要继续进行
    $length = count($arr);
    if ($length <= 1) {
      return $arr;
    }
    $base_num = $arr[0]; //选择一个标尺 选择第一个元素
    //初始化两个数组
    $left_array = array(); //小于标尺的
    $right_array = array(); //大于标尺的
    for ($i = 1; $i < $length; $i++) {   //遍历 除了标尺外的所有元素,按照大小关系放入两个数组内
      if ($base_num > $arr[$i]) {
        //放入左边数组
        $left_array[] = $arr[$i];
      } else {
        //放入右边
        $right_array[] = $arr[$i];
      }
    }
    //再分别对 左边 和 右边的数组进行相同的排序处理方式
    //递归调用这个函数,并记录结果
    $left_array = $this->quick_sort($left_array);
    $right_array = $this->quick_sort($right_array);
    //合并左边 标尺 右边
    return array_merge($left_array, array($base_num), $right_array);
}
public function test() {
    $arr = array(4, 3, 1, 2, 8, 9);
    var_dump($arr);
    echo '<br/>';
    $arr = $this->quick_sort($arr);
    var_dump($arr);
}

二分查找

public function bin_search($arr, $low, $high, $k) {
    if ($low <= $high) {
      $mid = intval(($low + $high) / 2);
      if ($arr[$mid] == $k) {
        return $mid;
      } else if ($k < $arr[$mid]) {
        return $this->bin_search($arr, $low, $mid - 1, $k);
      } else {
        return $this->bin_search($arr, $mid + 1, $high, $k);
      }
    }
    return -1;
}
public function test() {
    $arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
    var_dump($arr);
    echo '<br/>';
    $arr = $this->bin_search($arr, 0, 8, 4);
    var_dump($arr);
}

顺序查找

public function seq_search($arr, $n, $k) {
    $array[$n] = $k;
    for ($i = 0; $i < $n; $i++) {
      if ($arr[$i] == $k) {
        break;
      }
    }
    if ($i < $n) {
      return $i;
    } else {
      return -1;
    }
}
public function test_suanfa() {
    $arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
    var_dump($arr);
    echo '<br/>';
    $arr = $this->seq_search($arr, 4, 4);
    var_dump($arr);
}

线性表的删除

public function delete_array_element($array, $i) {
    $len = count($array);
    for ($j = $i; $j < $len; $j ++) {
      if (isset($array[$j + 1])) {
        $array[$j] = $array[$j + 1];
      }
    }
    array_pop($array);
    return $array;
}
public function test() {
    $arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
    var_dump($arr);
    echo '<br/>';
    $arr = $this->delete_array_element($arr, 4);
    var_dump($arr);
}

字符串翻转

public function strrev($str) {
    $rev_str = '';
    if ($str == '') {
      return 0;
    }
    for ($i = (strlen($str) - 1); $i >= 0; $i --) {
      $rev_str .= $str[$i];
    }
    return $rev_str;
}
public function test() {
    $arr = 'hellow wolrd';
    var_dump($arr);
    echo '<br/>';
    $arr = $this->strrev($arr);
    var_dump($arr);
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP备份数据库生成SQL文件并下载的函数代码
Feb 05 PHP
php实现redis数据库指定库号迁移的方法
Jan 14 PHP
php多次include后导致全局变量global失效的解决方法
Feb 28 PHP
PHP+MYSQL中文乱码问题
Jul 01 PHP
学习php设计模式 php实现合成模式(composite)
Dec 08 PHP
PHP中spl_autoload_register()函数用法实例详解
Jul 18 PHP
Thinkphp事务操作实例(推荐)
Apr 01 PHP
完美解决Thinkphp3.2中插入相同数据的问题
Aug 01 PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 PHP
PHP微信网页授权的配置文件操作分析
May 29 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 PHP
php时间戳转换代码详解
Aug 04 #PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 #PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
Aug 03 #PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
Aug 03 #PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 #PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
Aug 02 #PHP
php抽象类和接口知识点整理总结
Aug 02 #PHP
You might like
10个可以简化php开发过程的MySQL工具
2010/04/11 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
PHP7 其他修改
2021/03/09 PHP
List all the Databases on a SQL Server
2007/06/21 Javascript
Firefox outerHTML实现代码
2009/06/04 Javascript
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
jQuery判断元素是否是隐藏的代码
2011/04/24 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
解析js如何获取css样式
2016/12/11 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
详解js类型判断
2018/05/22 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
Python实现图像几何变换
2015/07/06 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
简单实现python画圆功能
2018/01/25 Python
Python实现E-Mail收集插件实例教程
2019/02/06 Python
总结python中pass的作用
2019/02/27 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
Python爬虫与反爬虫大战
2020/07/30 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
交通事故协议书范文
2014/10/23 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
北京大学中文系教授推荐的10本小说
2019/08/08 职场文书
golang判断key是否在map中的代码
2021/04/24 Golang
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
浅谈Python中的正则表达式
2021/06/28 Python
vue实现列表垂直无缝滚动
2022/04/08 Vue.js