当前位置:首页 > PHP

php排序算法实现

2026-02-16 06:19:20PHP

PHP 排序算法实现

PHP 提供了多种内置的排序函数,如 sort()asort()ksort() 等,但手动实现排序算法有助于深入理解其原理。以下是几种常见排序算法的 PHP 实现:

冒泡排序(Bubble Sort)

冒泡排序通过重复遍历数组,比较相邻元素并交换位置,将较大的元素逐渐“冒泡”到数组末尾。

function bubbleSort($array) {
    $n = count($array);
    for ($i = 0; $i < $n - 1; $i++) {
        for ($j = 0; $j < $n - $i - 1; $j++) {
            if ($array[$j] > $array[$j + 1]) {
                $temp = $array[$j];
                $array[$j] = $array[$j + 1];
                $array[$j + 1] = $temp;
            }
        }
    }
    return $array;
}

选择排序(Selection Sort)

选择排序每次从未排序部分选择最小(或最大)元素,放到已排序部分的末尾。

function selectionSort($array) {
    $n = count($array);
    for ($i = 0; $i < $n - 1; $i++) {
        $minIndex = $i;
        for ($j = $i + 1; $j < $n; $j++) {
            if ($array[$j] < $array[$minIndex]) {
                $minIndex = $j;
            }
        }
        if ($minIndex != $i) {
            $temp = $array[$i];
            $array[$i] = $array[$minIndex];
            $array[$minIndex] = $temp;
        }
    }
    return $array;
}

插入排序(Insertion Sort)

插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

function insertionSort($array) {
    $n = count($array);
    for ($i = 1; $i < $n; $i++) {
        $key = $array[$i];
        $j = $i - 1;
        while ($j >= 0 && $array[$j] > $key) {
            $array[$j + 1] = $array[$j];
            $j--;
        }
        $array[$j + 1] = $key;
    }
    return $array;
}

快速排序(Quick Sort)

快速排序通过选择一个“基准”元素,将数组分为两部分,一部分小于基准,另一部分大于基准,然后递归排序这两部分。

function quickSort($array) {
    if (count($array) <= 1) {
        return $array;
    }
    $pivot = $array[0];
    $left = $right = [];
    for ($i = 1; $i < count($array); $i++) {
        if ($array[$i] < $pivot) {
            $left[] = $array[$i];
        } else {
            $right[] = $array[$i];
        }
    }
    return array_merge(quickSort($left), [$pivot], quickSort($right));
}

归并排序(Merge Sort)

归并排序采用分治法,将数组分成两半,分别排序后再合并。

function mergeSort($array) {
    if (count($array) <= 1) {
        return $array;
    }
    $mid = (int)(count($array) / 2);
    $left = array_slice($array, 0, $mid);
    $right = array_slice($array, $mid);
    return merge(mergeSort($left), mergeSort($right));
}

function merge($left, $right) {
    $result = [];
    while (count($left) > 0 && count($right) > 0) {
        if ($left[0] < $right[0]) {
            $result[] = array_shift($left);
        } else {
            $result[] = array_shift($right);
        }
    }
    return array_merge($result, $left, $right);
}

使用示例

以下是调用上述排序算法的示例:

$unsortedArray = [64, 34, 25, 12, 22, 11, 90];
echo "Original Array: " . implode(", ", $unsortedArray) . "\n";

$sortedArray = bubbleSort($unsortedArray);
echo "Bubble Sort: " . implode(", ", $sortedArray) . "\n";

$sortedArray = selectionSort($unsortedArray);
echo "Selection Sort: " . implode(", ", $sortedArray) . "\n";

$sortedArray = insertionSort($unsortedArray);
echo "Insertion Sort: " . implode(", ", $sortedArray) . "\n";

$sortedArray = quickSort($unsortedArray);
echo "Quick Sort: " . implode(", ", $sortedArray) . "\n";

$sortedArray = mergeSort($unsortedArray);
echo "Merge Sort: " . implode(", ", $sortedArray) . "\n";

性能比较

不同排序算法的时间复杂度和适用场景不同:

php排序算法实现

  • 冒泡排序:时间复杂度为 O(n²),适合小规模数据。
  • 选择排序:时间复杂度为 O(n²),适合小规模数据。
  • 插入排序:时间复杂度为 O(n²),适合部分有序数据。
  • 快速排序:平均时间复杂度为 O(n log n),适合大规模数据。
  • 归并排序:时间复杂度为 O(n log n),适合大规模数据且需要稳定排序的场景。

以上实现可以帮助理解排序算法的基本原理,实际应用中可根据需求选择合适的内置函数或自定义实现。

标签: 算法php
分享给朋友:

相关文章

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…