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在线生成二维码代码(google api)
Jun 03 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
Jun 21 PHP
基于php和mysql的简单的dao类实现crud操作功能
Jan 27 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
php向js函数传参的几种方法
Aug 10 PHP
如何让CI框架支持service层
Oct 29 PHP
php通过baihui网API实现读取word文档并展示
Jun 22 PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 PHP
php 使用html5实现多文件上传实例
Oct 24 PHP
thinkPHP和onethink微信支付插件分享
Aug 11 PHP
PHP中echo与print区别点整理
Mar 09 PHP
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
Apr 16 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
php gzip压缩输出的实现方法
2013/04/27 PHP
解析yii数据库的增删查改
2013/06/20 PHP
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
给ECShop添加最新评论
2015/01/07 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
2019/04/02 PHP
js setattribute批量设置css样式
2009/11/26 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
javascript:json数据的页面绑定示例代码
2014/01/26 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
微信小程序联网请求的轮播图
2017/07/07 Javascript
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
[26:50]2018完美盛典DOTA2表演赛
2018/12/17 DOTA
[55:11]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第一场 11.26
2020/11/30 DOTA
Python中元组,列表,字典的区别
2017/05/21 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
python设置随机种子实例讲解
2019/09/12 Python
Django Xadmin多对多字段过滤实例
2020/04/07 Python
毕业感言怎么写
2015/07/31 职场文书
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript