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来处理多个提交任务
Oct 09 PHP
php addslashes 函数详细分析说明
Jun 23 PHP
Php Mssql操作简单封装支持存储过程
Dec 11 PHP
php处理文件的小例子(解压缩,删除目录)
Feb 03 PHP
php 读取文件头判断文件类型的实现代码
Aug 05 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
Jan 07 PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
Oct 23 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
php实现的用户查询类实例
Jun 18 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 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+MySQL的聊天室设计
2006/10/09 PHP
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
PHP 第二节 数据类型之转换
2012/04/28 PHP
php中static 静态变量和普通变量的区别
2016/12/01 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
DataFrame中去除指定列为空的行方法
2018/04/08 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
法国家具及室内配件店:home24
2017/01/21 全球购物
英智兴达软件测试笔试题
2016/10/12 面试题
销售员自我评价怎么写
2013/09/19 职场文书
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
优质的学校老师推荐信
2013/10/28 职场文书
报社实习生自荐信
2014/01/24 职场文书
校园安全广播稿
2014/02/08 职场文书
多媒体专业自我鉴定
2014/02/28 职场文书
《学棋》教后反思
2014/04/14 职场文书
行政文员岗位职责
2015/02/04 职场文书
网聊搭讪开场白
2015/05/28 职场文书
2016年教师节慰问信
2015/12/01 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
PHP命令行与定时任务
2021/04/01 PHP
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python