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实现mysql数据库备份类
Mar 20 PHP
PHP求小于1000的所有水仙花数的代码
Jan 10 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
Jan 06 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
Jun 21 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
Nov 18 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
Mar 18 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
Nov 23 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
May 30 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 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中文分词 自动获取关键词介绍
2012/11/13 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
PHP批斗大会之缺失的异常详解
2019/07/09 PHP
Jquery之美中不足小结
2011/02/16 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
微信小程序实现顶部选项卡(swiper)
2020/06/19 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
在vue中使用G2图表的示例代码
2019/03/19 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
vscode 配置 python3开发环境的方法
2019/09/19 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
为什么说python更适合树莓派编程
2020/07/20 Python
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
运动会拉拉队口号
2014/06/09 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
丧事答谢词大全
2015/09/30 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
mysql如何配置白名单访问
2021/06/30 MySQL
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python