PHP常用的排序和查找算法

PHP常用的排序和查找算法

排序算法

冒泡排序

冒泡排序是一种简单的排序算法。 它多次遍历要排序的列表,每次比较相邻的两项,如果它们的顺序错误就把它们交换过来。

示例代码如下:

function bubble_sort($arr) {
    $len = count($arr);
    for($i=1; $i<$len; $i++) {
        for($j=0; $j<$len-$i; $j++) {
            if($arr[$j] > $arr[$j+1]) {
                $temp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $temp;
            }
        }
    }
    return $arr;
}

$arr = array(3, 8, 2, 1, 6, 5, 4, 7);
$arr = bubble_sort($arr);
print_r($arr);

输出结果:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
)

快速排序

快速排序也是一种常用的排序算法。 它的基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都要比另一部分的所有数据都要小,然后再按此方法分别对两部分数据进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

示例代码如下:

function quick_sort($arr) {
    $len = count($arr);
    if($len <= 1) {
        return $arr;
    }
    $mid = $arr[0];
    $left = array();
    $right = array();
    for($i=1; $i<$len; $i++) {
        if($arr[$i] > $mid) {
            $right[] = $arr[$i];
        } else {
            $left[] = $arr[$i];
        }
    }
    $left = quick_sort($left);
    $right = quick_sort($right);
    return array_merge($left, array($mid), $right);
}

$arr = array(3, 8, 2, 1, 6, 5, 4, 7);
$arr = quick_sort($arr);
print_r($arr);

输出结果:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
)

查找算法

顺序查找

顺序查找是一种简单的查找算法,它从数据的一端开始,逐个比较数据元素,以此查找所需的数据元素。时间复杂度为$O(n)$。

示例代码如下:

function sequential_search($arr, $key) {
    $len = count($arr);
    for($i=0; $i<$len; $i++) {
        if($arr[$i] == $key) {
            return $i; 
        }
    }
    return -1;
}

$arr = array(3, 8, 2, 1, 6, 5, 4, 7);
$key = 6;
$index = sequential_search($arr, $key);
echo "Value ".$key." found at index ".$index;

输出结果:

Value 6 found at index 4

二分查找

二分查找是一种高效的查找算法,前提是数据必须是有序的。算法的基本思想是先找到中间的元素进行比较,如果等于则找到,如果小于则在左边继续查找,如果大于则在右边继续查找,以此类推。时间复杂度为$O(Logn)$。

示例代码如下:

function binary_search($arr, $key) {
    $low = 0;
    $high = count($arr) - 1;
    while($low <= $high) {
        $mid = intval(($low + $high) / 2);
        if($arr[$mid] == $key) {
            return $mid;
        } elseif($arr[$mid] < $key) {
            $low = $mid + 1;
        } else {
            $high = $mid - 1;
        }
    }
    return -1;
}

$arr = array(1, 2, 3, 4, 5, 6, 7, 8);
$key = 6;
$index = binary_search($arr, $key);
echo "Value ".$key." found at index ".$index;

输出结果:

Value 6 found at index 5

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP常用的排序和查找算法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • JavaScript实现基础排序算法的示例详解

    JavaScript实现基础排序算法的示例详解 排序算法可以说是计算机科学中最基础的算法之一。而对于前端开发者来说,掌握一些简单的排序算法是很有必要的,因为它们可以帮助我们解决很多实际问题,如搜索结果排序、排名等。在这里,我们将讲解JavaScript如何实现基础排序算法。 冒泡排序 冒泡排序是最简单的排序算法之一。它将数组中的元素两两比较,如果顺序不正确就…

    算法与数据结构 2023年5月19日
    00
  • 利用explain排查分析慢sql的实战案例

    对于利用explain排查分析慢SQL的实战案例,可以按照以下步骤进行。 1. 获取慢SQL 首先要获取慢SQL,即执行时间较长的SQL语句。可以在MySQL的慢查询日志中查看,也可以使用一些监控工具进行查看。获取慢SQL之后,可以通过一些工具进行格式化,让其更加可读。 2. 使用explain解析SQL 在获取慢SQL之后,接下来就是使用explain对S…

    算法与数据结构 2023年5月19日
    00
  • MybatisPlus中的insert操作详解

    MybatisPlus 是 MyBatis 的增强工具包,可以极大地简化 MyBatis 的操作。其中包括许多基础操作,例如insert、update、delete、select等操作。在这里,我们将详细讲解 MybatisPlus 中的 insert 操作。 什么是 MybatisPlus 中的 insert 操作? MybatisPlus 中的 inse…

    算法与数据结构 2023年5月19日
    00
  • C++实现归并排序

    C++实现归并排序 什么是归并排序 归并排序是一种分治策略的排序算法,将待排序的序列切分为若干个子序列,递归地对子序列排序,并将各子序列的排序结果合并成最终有序序列。归并排序的时间复杂度为O(nlogn),是一种高效的排序算法。 归并排序的实现 递归实现 归并排序的递归实现比较容易理解。我们可以将待排序的序列不断切分为更小的子序列,直到子序列长度为1,此时子…

    算法与数据结构 2023年5月19日
    00
  • C++超详细讲解贪心策略的设计及解决会场安排问题

    C++超详细讲解贪心策略的设计及解决会场安排问题 什么是贪心算法 贪心算法是一种近似算法,通常用于求解最优化问题。在每一步,贪心算法总是做出在当前看来最优的选择,并希望通过这样的选择最终能达到全局最优。 解决会场安排问题的贪心策略 问题描述 为了方便会议的安排,需要一个会议室来容纳所有的会议。现在有n个会议需要在会议室中安排,假设每个会议被安排在一个时间段内…

    算法与数据结构 2023年5月19日
    00
  • C语言 冒泡排序算法详解及实例

    冒泡排序算法详解及实例 什么是冒泡排序算法 冒泡排序是一种很基础的排序算法,它通过从序列的一端开始,依次比较相邻两个元素的大小,如果它们的顺序不对,就交换它们的位置,直到把整个序列排序完成。冒泡排序算法的时间复杂度为O(n^2),所以它并不适合排序规模很大的序列。 冒泡排序算法的实现 冒泡排序算法的实现很简单,其核心代码如下: void bubble_sor…

    算法与数据结构 2023年5月19日
    00
  • JS排序之选择排序详解

    JS排序之选择排序详解 选择排序简介 选择排序,就是每一次在未排序的元素中选择最小(或最大)的一个元素,放在已排序的元素的末尾,直到所有元素都排好序。 首先,我们要明白选择排序的核心思想。这种排序方式并不是两两交换位置,而是在遍历整个待排序的序列中先找到最小的元素,放在正确的位置,然后再从剩余的未排序元素中继续寻找最小的元素,放在已排序序列的末尾,依次类推,…

    算法与数据结构 2023年5月19日
    00
  • 详解高性能缓存Caffeine原理及实战

    详解高性能缓存Caffeine原理及实战 简介 Caffeine是一个基于Java的高性能缓存库,其目标是提供比ConcurrentHashMap更高效、更灵活的缓存方案。Caffeine支持多种缓存策略、过期机制以及可自定义的缓存加载策略等功能。本文将详细介绍Caffeine的原理、使用方法及实现实例。 Caffeine的原理 Caffeine的核心是一个…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部