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脚本的10个技巧(4)
Oct 09 PHP
用PHP和ACCESS写聊天室(一)
Oct 09 PHP
PHP文件读写操作之文件读取方法详解
Jan 13 PHP
PHP中计算字符串相似度的函数代码
Dec 29 PHP
ThinkPHP模版引擎之变量输出详解
Dec 05 PHP
浅析iis7.5安装配置php环境
May 10 PHP
微信支付的开发流程详解
Sep 13 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 PHP
PHP简单读取xml文件的方法示例
Apr 20 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 13 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 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
php5与php7的区别点总结
2019/10/11 PHP
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
2016/06/17 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
el-select数据过多懒加载的解决(loadmore)
2019/05/29 Javascript
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
聊聊Python中的pypy
2018/01/12 Python
python计算两个地址之间的距离方法
2018/06/09 Python
Python利用PyExecJS库执行JS函数的案例分析
2019/12/18 Python
python爬虫请求头的使用
2020/12/01 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
10个最常见的HTML5面试题 附答案
2016/06/06 HTML / CSS
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
教师读书活动总结
2014/05/07 职场文书
令人印象深刻的自荐信
2014/05/25 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
导游欢送词
2015/01/31 职场文书
贪污检举信范文
2015/03/02 职场文书
交心谈心活动总结
2015/05/11 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
纪委立案决定书
2015/06/24 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
python 算法题——快乐数的多种解法
2021/05/27 Python
PHP中strval()函数实例用法
2021/06/07 PHP
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL