iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP常见算法
  • 248
分享到

PHP常见算法

php算法 2023-10-20 16:10:58 248人浏览 安东尼
摘要

排序 冒泡排序 依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。 $arr = [8,1,10,9,5,7];function bubbleSort($arr){ // 外层 f

排序

冒泡排序

依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。

$arr = [8,1,10,9,5,7];function bubbleSort($arr){    // 外层 for 循环控制循环次数    for ($i=0; $i<count($arr) ; $i++) {        //内层 for 循环进行两数交换,找每次的最大数,排到最后        for ($j=0; $j < count($arr)-1; $j++) {            //数组里第一个和第二个对比,如果1>2,执行数值互换            if($arr[$j] >$arr[$j+1]){   $x = $arr[$j];  //第一赋给一个变量                $arr[$j] = $arr[$j+1]; //第二赋给第一                $arr[$j+1] = $x;  //把变量给第二,结果就是1,2的数值互换                // $a=10;                // $b=20;                // $x=$a; $x=10                // $a=$b; $a=20                // $b=$X; $b=10            }        }    }    return $arr;}print_r(bubbleSort($arr));

快速排序

快速排序是对冒泡排序的一种改进。
设置一个基准元素,通过排序将需要排序的数据分割成两个部分,其中一部分的所有数据比基准元素小,另一部分的所有数据比基准元素大,然后对这两部分数据分别进行递归快速排序,最后将得到的数据和基准元素进行合并,就得到了所需数据。

$arr = [8,1,10,9,5,7];function quickSort($arr){    $lenth = count($arr);//获取数组个数    if($lenth <= 1){//小于等于一个不用往下走了        return $arr;    }    //选择基准元素。一般选第一个或最后一个    $first = $arr[0];    $left = array();//接收小于基准元素的值    $right = array();//接收大于基准元素的值    //循环从1开始,因为基准元素是0    for($i=1;$i<$lenth;$i++){        if($arr[$i]<$first){//小于基准元素的值            $left[] = $arr[$i];        }else{//大于基准元素的值            $right[] = $arr[$i];        }    }    //递归排序    $left = quickSort($left);    $right = quickSort($right);    //合并返回数组    return array_merge($left,array($first),$right);}print_r(quickSort($arr));

选择排序

找到数组中最小的元素,拎出来,将它和数组的第一个元素交换位置;
2.在剩下的元素中继续寻找最小的元素,拎出来,和数组的第二个元素交换位置;
3.如此循环,直到整个数组排序完成。

$arr = [8,1,10,9,5,7];function selectSort($arr){    //实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数,$i 当前最小值的位置, 需要参与比较的元素    for($i=0, $len=count($arr); $i<$len-1; $i++){        //先假设最小的值的位置        $p = $i;        //$j 当前都需要和哪些元素比较,$i 后边的。        for($j=$i+1; $j<$len; $j++) {            //$arr[$p] 是 当前已知的最小值            if($arr[$p] > $arr[$j]){                //比较,发现更小的,记录下最小值的位置;并且在下次比较时,应该采用已知的最小值进行比较。                $p = $j;            }        }        //已经确定了当前的最小值的位置,保存到$p中。如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可。        if($p != $i){            $tmp = $arr[$p];            $arr[$p] = $arr[$i];            $arr[$i] = $tmp;        }    }     return $arr;}print_r(selectSort($arr));

插入排序

每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。

$arr = [8,1,10,9,5,7];function insertSort($arr){    $count = count($arr);       for($i=1; $i<$count; $i++){                 $tmp = $arr[$i];                $j = $i - 1;                while(isset($arr[$j]) && $arr[$j] > $tmp){                         $arr[$j+1] = $arr[$j];                      $arr[$j] = $tmp;                        $j--;                   }        }        return $arr; } print_r(insertSort($arr));

希尔排序

希尔排序(shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。
希尔排序实质上是一种分组插入方法。它的基本思想是:对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。 这一趟排序完成之后,每一个组的元素都是有序的。然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,整个数列就是有序的。

$arr = [8,1,10,9,5,7];function shellSort(&$arr){    if(!is_array($arr))return;$n=count($arr);    for($gap=floor($n/2);$gap>0;$gap=floor($gap/=2)){        for($i=$gap;$i<$n;++$i){            for($j=$i-$gap;$j>=0&&$arr[$j+$gap]<$arr[$j];$j-=$gap){                $temp=$arr[$j];                $arr[$j]=$arr[$j+$gap];                $arr[$j+$gap]=$temp;            }        }    }    return $arr;}print_r(shellSort($arr));

查找

二分查找

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

function binarySearch($array, $findVal){    // 非数组或者数组为空,直接返回-1    if (!is_array($array) || empty($array)) {        return -1;    }    // 查找区间,起点和终点    $start = 0;    $end = count($array) - 1;    while ($start <= $end) {        // 以中间点作为参照点比较,取整数        $middle = intval(($start + $end) / 2);         if ($array[$middle] > $findVal) {            // 查找数比参照点小,则要查找的数在左半边            // 因为 $middle 已经比较过了,这里需要减1            $end = $middle - 1;         } elseif ($array[$middle] < $findVal) {            // 查找数比参照点大,则要查找的数在右半边            // 因为 $middle 已经比较过了,这里需要加1            $start = $middle + 1;         } else {            // 查找数与参照点相等,则找到返回            return $middle;        }    }    // 未找到,返回-1    return -1;} // 调用$array = [10,12,16,19,20,34,56,78,84,95,100];echo binarySearch($array, 84);function binSearch($array, $findVal, $start, $end){    // 以中间点作为参照点比较,取整数    $middle = intval(($start + $end) / 2);    if ($start > $end) {        return -1;    }    if ($findVal > $array[$middle]) {        // 查找数比参照点大,则要查找的数在右半边        return binSearch($array, $findVal, $middle + 1, $end);     } elseif ($findVal < $array[$middle]) {        // 查找数比参照点小,则要查找的数在左半边        return binSearch($array, $findVal, $start, $middle - 1);     } else {        return $middle;    }} // 调用$arr = [10,12,16,19,20,34,56,78,84,95,100];var_dump(binSearch($arr, 95, 0, count($arr)-1));

ps:未完待续

来源地址:https://blog.csdn.net/heshihu2019/article/details/132699273

--结束END--

本文标题: PHP常见算法

本文链接: https://www.lsjlt.com/news/433086.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP常见算法
    排序 冒泡排序 依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。 $arr = [8,1,10,9,5,7];function bubbleSort($arr){ // 外层 f...
    99+
    2023-10-20
    php 算法
  • PHP如何实现常见排序算法
    本篇内容介绍了“PHP如何实现常见排序算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、冒泡排序两两相比,每循环一轮就不用再比较最后一个...
    99+
    2023-07-01
  • PHP 算法实现中常见的误区
    在 php 算法实现中,常见的误区包括:类型转换不当、算法选择不正确、边界条件处理不佳和效率优化忽视。解决办法包括:显式类型转换、选择合适的算法、检查边界条件和利用优化技术。通过避免这些...
    99+
    2024-05-08
    php 误区
  • PHP常见基础算法实例分析
    这篇文章主要介绍“PHP常见基础算法实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP常见基础算法实例分析”文章能帮助大家解决问题。TODO堆排序选择排序链表翻转动态规划<phpcl...
    99+
    2023-06-30
  • 常见的php排序算法有哪些
    常见的PHP排序算法有以下几种:1. 冒泡排序(Bubble Sort):依次比较相邻的两个元素,将较大的元素向后移动,直到最后一个...
    99+
    2023-08-25
    php
  • 常见的PHP算法面试题有哪些
    这篇文章将为大家详细讲解有关常见的PHP算法面试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。插入排序(一维数组) 基本思想:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使...
    99+
    2023-06-15
  • PHP常见的几种排序算法介绍
    这篇文章主要介绍“PHP常见的几种排序算法介绍”,在日常操作中,相信很多人在PHP常见的几种排序算法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP常见的几种排序算法...
    99+
    2024-04-02
  • 总结三种常见php算法的实现方法
    PHP是一种强大的脚本语言,它在Web开发领域中广泛应用。除了在网站开发中使用,PHP还可以用于实现各种算法和数据结构。在本文中,我们将介绍三个常见的算法,包括冒泡排序、快速排序和二分查找,以及在PHP中如何实现它们。一、冒泡排序冒泡排序是...
    99+
    2023-05-14
  • LeetCode常见的PHP编程算法及其解析
    LeetCode是一个非常受欢迎的在线编程平台,它提供了大量的编程题目,涵盖了各种不同的算法和数据结构。对于PHP程序员来说,掌握LeetCode常见的编程算法是非常有必要的。本文将介绍一些常见的PHP编程算法,并给出详细的解析和演示代码...
    99+
    2023-08-16
    编程算法 leetcode 重定向
  • PHP实现常见排序算法的示例代码
    目录1、冒泡排序2、选择排序3、快速排序4、插入排序补充1、冒泡排序 两两相比,每循环一轮就不用再比较最后一个元素了,因为最后一个元素已经是最大或者最小。 function maop...
    99+
    2024-04-02
  • 常见图像噪声和常见图像噪声处理算法
    1、图像噪声 1.1图像噪声的分类 图像噪声按噪声与信号的关系可分为加性噪声和乘性噪声;按照产生原因可分为外部噪声和内部噪声;按照统计特性可分为平稳噪声和非平稳噪声;平稳噪声基于统计后的概率密度函数又可以分为:高斯噪声、泊松噪声、脉冲噪声、...
    99+
    2023-09-10
    算法 计算机视觉 python 图像处理
  • 优化常见的java排序算法
    目录冒泡排序原始的写法优化一优化二选择排序方法一方法二堆排序建大堆来实现堆排建小堆来实现堆排插入排序实现优化一优化二归并排序递归实现归并排序优化来看O(n)的排序当然除了基于比较的排...
    99+
    2024-04-02
  • 浅谈Java常见的排序算法
    目录一、直接插入排序二、希尔排序三、冒泡排序四、快速排序五、选择排序(Selection Sort)六、堆排序七、归并排序一、直接插入排序 基本思想: 将一个记录插入到已排序的有序表...
    99+
    2024-04-02
  • PHP常见方法封装总结
    目录1.get请求2.post请求3.随机字符串4.返回json数据5.数据过滤6.重定向7.获取客户端ip1.get请求 function get_curl($url, $time...
    99+
    2024-04-02
  • PHP常见算法 - 选择排序 排序步骤输出展示
    // 将数组由小到大排序$arr = [3, 4, 2, 8, 9, 1, 6];echo json_encode($arr).'';// 1、需要选择的次数,每次只能选择一个最大或者最小值for ($i = 0, $len = count...
    99+
    2023-09-05
    算法 php 排序算法
  • Java中常见的查找算法与排序算法总结
    目录1. 基本查找2. 二分查找3. 插值查找4. 斐波那契查找5. 分块查找6. 哈希查找7. 树表查找十大排序算法1. 冒泡排序2. 选择排序3. 插入排序4. 快速排序数据结构...
    99+
    2023-03-11
    Java查找算法 Java排序算法 Java查找 排序
  • Golang中常见加密算法有哪些
    本文小编为大家详细介绍“Golang中常见加密算法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang中常见加密算法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.md5 加密&md...
    99+
    2023-07-05
  • PHP 数组键值互换:常见算法的优缺点剖析
    php 中互换数组键值的三种常见算法各有优缺点:array_flip():简单高效,但值必须唯一且无法处理多维数组。手动遍历:可以处理多维数组和控制异常,但代码较长且效率较低。ksort...
    99+
    2024-05-05
    php 数组
  • 介绍java中的常见排序算法
    Java中的排序算法主要包括以下几种: 冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)快速排序(Quick Sort)归并排序(Merge Sort)堆排序(Heap So...
    99+
    2023-10-26
    算法 排序算法 数据结构 java 笔记 学习
  • Java 常见排序算法代码分享
    目录1. 冒泡排序2. 选择排序3. 插入排序4. 快速排序5. 归并排序6. 希尔排序6.1 希尔-冒泡排序(慢)6.2 希尔-插入排序(快)7. 堆排序8. 计数排序9. 桶排序...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作