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 相关文章推荐
Apache设置虚拟WEB
Oct 09 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
PHP SEO优化之URL优化方法
Apr 21 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 PHP
如何用php获取程序执行的时间
Jun 09 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
PHP学习笔记(一) 简单了解PHP
Aug 04 PHP
php验证身份证号码正确性的函数
Jul 20 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
May 29 PHP
基于thinkphp6.0的success、error实现方法
Nov 05 PHP
PHP执行linux命令6个函数代码实例
Nov 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
php中动态调用函数的方法
2015/03/16 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
AngularJS创建自定义指令的方法详解
2016/11/03 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
AngularJS中$http的交互问题
2017/03/29 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
python全栈知识点总结
2019/07/01 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
python flask搭建web应用教程
2019/11/19 Python
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
五一家具促销方案
2014/01/10 职场文书
大学生旅游业创业计划书
2014/01/29 职场文书
业务员的岗位职责
2014/03/15 职场文书
文明倡议书范文
2014/04/15 职场文书
移风易俗倡议书
2014/04/15 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
独生子女证明范本
2015/06/19 职场文书
安全温馨提示语大全
2015/07/14 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书