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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
PHP XML备份Mysql数据库
May 27 PHP
PHP 裁剪图片成固定大小代码方法
Sep 09 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
解析如何去掉CodeIgniter URL中的index.php
Jun 25 PHP
PHP按行读取文件时删除换行符的3种方法
May 04 PHP
php根据生日计算年龄的方法
Jul 13 PHP
PHP计算近1年的所有月份
Mar 13 PHP
Laravel下生成验证码的类
Nov 15 PHP
使用XHProf查找PHP性能瓶颈的实例
Dec 13 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 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 strtotime 函数UNIX时间戳
2009/01/14 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
PHP微信开发之二维码生成类
2015/06/26 PHP
PHP数组函数知识汇总
2016/05/12 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
jQuery实现图片信息的浮动显示实例代码
2013/08/28 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
JS实现的车标图片提示效果代码
2015/10/10 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
2018/09/01 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
Python 创建子进程模块subprocess详解
2015/04/08 Python
Python编程中的文件操作攻略
2015/10/16 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
详解django.contirb.auth-认证
2018/07/16 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL