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日

相关文章

  • java ArrayList按照同一属性进行分组

    要按照同一属性进行分组,我们需要用到Java中的Collections类和Comparator接口。 首先,我们需要为ArrayList中的对象定义一个属性,以便按照该属性进行分组。例如,我们定义一个Person类,其中包含name和age两个属性,我们想要按照年龄进行分组。则代码如下: public class Person { private Strin…

    算法与数据结构 2023年5月19日
    00
  • PHP排序算法系列之桶排序详解

    PHP排序算法系列之桶排序详解 什么是桶排序? 桶排序是一种简单的排序算法,通过将待排序数组元素分别放到对应的桶中,然后在桶中对元素进行排序,最后将所有桶中元素合并得到有序的数组。 桶排序的步骤 创建一个数组作为桶,数组大小为待排序数组中的最大值加1,数组中每个元素初始化为0。 遍历待排序数组,将每个元素放到对应的桶中,即桶数组中下标为待排序元素的值的元素加…

    算法与数据结构 2023年5月19日
    00
  • PHP有序表查找之二分查找(折半查找)算法示例

    下面我将对“PHP有序表查找之二分查找(折半查找)算法示例”的完整攻略进行详细讲解。 一、什么是二分查找 二分查找又称为折半查找,是一种在有序数组中查找某一特定元素的搜索算法。基本思想是:将有序数组分成两部分,如果要查找的元素比数组中间的元素小,则在左半部分继续查找;如果要查找的元素比数组中间的元素大,则在右半部分继续查找,直到找到或者查找结束。 二分查找算…

    算法与数据结构 2023年5月19日
    00
  • 数据排序谁最快(javascript中的Array.prototype.sort PK 快速排序)

    首先,我们需要明确两个概念:Array.prototype.sort 和 快速排序算法。 Array.prototype.sort() 是 JavaScript 数组原生的排序方法,可以用于将数组中的元素按照某种规则进行排序。而快速排序算法则是一种高效的排序算法,其核心思想是通过递归将数组拆分成多个小数组,然后依次对这些小数组进行排序。 Array.prot…

    算法与数据结构 2023年5月19日
    00
  • Go语言展现快速排序算法全过程的思路及代码示例

    这里是关于“Go语言展现快速排序算法全过程的思路及代码示例”的详细攻略。 什么是快速排序算法 快速排序算法是一种基于比较的排序算法,它通过选择一个基准元素,将数组分为两部分然后递归地对这两部分进行排序,最终完成对整个数组的排序。快速排序算法的时间复杂度为 O(nlogn) 平均情况下,但是在最坏情况下会退化为 O(n^2)。 快速排序算法的实现思路 下面是快…

    算法与数据结构 2023年5月19日
    00
  • JavaScript中的冒泡排序法

    JavaScript中的冒泡排序法 冒泡排序法就是通过比较任意两个相邻的元素,然后循环遍历整个数组,逐步将最大(或最小)的数移到最后一位。当没有相邻的元素需要互换位置的时候即可完成排序。冒泡排序法是常用的简单排序算法,虽然时间复杂度比高级算法如快速排序、堆排序等要高,但是对于小的数据集合,其性能表现要好于其他排序算法。 以下是冒泡排序法的具体实现: func…

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

    C语言奇偶排序算法详解及实例代码 本篇文章将详细讲解C语言中奇偶排序算法的原理、实现方法及具体的实例代码,并通过两个示例说明其使用方法。 原理介绍 奇偶排序算法又叫交替排序算法,是一种简单但较慢的排序算法,通常用于小型数据集中的排序。该算法通过使用两个线程分别对奇数位置和偶数位置的元素进行比较和交换来实现排序。 该算法的原理如下: 从头到尾扫描一遍待排序数组…

    算法与数据结构 2023年5月19日
    00
  • C语言排序算法之选择排序(直接选择排序,堆排序)

    C语言排序算法之选择排序 选择排序概述 选择排序是一种简单直观的排序算法,其基本思想是:每一趟从数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列最后,直到全部数据元素排完为止。 选择排序算法的时间复杂度为O(n^2),在数据规模较小时效率较高,但是在数据规模较大时效率较低。 选择排序示例 以下是一个使用选择排序算法对数组进行排序的示例: #in…

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