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 相关文章推荐
PHPMailer邮件类利用smtp.163.com发送邮件方法
Sep 11 PHP
PHP 日期加减的类,很不错
Oct 10 PHP
php 数学运算验证码实现代码
Oct 11 PHP
php自动给文章加关键词链接的函数代码
Nov 29 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
PHP截断标题且兼容utf8和gb2312编码
Sep 22 PHP
php常用hash加密函数
Nov 22 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
使用PHP进行微信公众平台开发的示例
Aug 21 PHP
PHP+jQuery翻板抽奖功能实现
Oct 19 PHP
PHP7数组的底层实现示例
Aug 25 PHP
Thinkphp 框架扩展之类库扩展操作详解
Apr 23 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使用递归算法无限遍历数组示例
2017/01/13 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
utf8的编码算法 转载
2006/12/27 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
简约JS日历控件 实例代码
2013/07/12 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
2015/11/17 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
web.py 十分钟创建简易博客实现代码
2016/04/22 Python
Python读写docx文件的方法
2018/05/08 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
python实现列表的排序方法分享
2019/07/01 Python
python 实现生成均匀分布的点
2019/12/05 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
Python如何自动获取目标网站最新通知
2020/06/18 Python
Python代码执行时间测量模块timeit用法解析
2020/07/01 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
上课说话检讨书500字
2014/11/01 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
辩护意见书
2015/06/04 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL
我的收音机情缘
2022/04/05 无线电