当前位置:首页 > PHP

php 实现堆排序

2026-03-13 11:36:18PHP

堆排序的基本概念

堆排序是一种基于二叉堆数据结构的比较排序算法。二叉堆是一种完全二叉树,可以分为最大堆和最小堆。在最大堆中,父节点的值总是大于或等于子节点的值;在最小堆中,父节点的值总是小于或等于子节点的值。

php 实现堆排序

实现堆排序的步骤

构建最大堆:将无序数组构建成一个最大堆,此时堆顶元素为最大值。 交换堆顶与末尾元素:将堆顶元素与末尾元素交换,缩小堆的范围(排除已排序的部分)。 调整堆结构:对剩余的堆进行调整,使其重新满足最大堆的性质。 重复上述步骤,直到堆的大小为1。

php 实现堆排序

PHP实现堆排序代码

function heapSort(&$arr) {
    $n = count($arr);

    // 构建最大堆
    for ($i = floor($n / 2) - 1; $i >= 0; $i--) {
        heapify($arr, $n, $i);
    }

    // 交换堆顶与末尾元素,并调整堆
    for ($i = $n - 1; $i > 0; $i--) {
        // 交换堆顶和当前末尾元素
        $temp = $arr[0];
        $arr[0] = $arr[$i];
        $arr[$i] = $temp;

        // 调整堆
        heapify($arr, $i, 0);
    }
}

function heapify(&$arr, $n, $i) {
    $largest = $i;      // 初始化最大值为当前节点
    $left = 2 * $i + 1; // 左子节点
    $right = 2 * $i + 2; // 右子节点

    // 如果左子节点大于当前最大值
    if ($left < $n && $arr[$left] > $arr[$largest]) {
        $largest = $left;
    }

    // 如果右子节点大于当前最大值
    if ($right < $n && $arr[$right] > $arr[$largest]) {
        $largest = $right;
    }

    // 如果最大值不是当前节点,交换并继续调整
    if ($largest != $i) {
        $temp = $arr[$i];
        $arr[$i] = $arr[$largest];
        $arr[$largest] = $temp;

        heapify($arr, $n, $largest);
    }
}

// 测试代码
$array = [12, 11, 13, 5, 6, 7];
heapSort($array);
print_r($array);

代码说明

heapSort函数是堆排序的主函数,负责构建最大堆和交换堆顶元素。heapify函数用于调整堆结构,确保父节点的值大于子节点的值。

构建最大堆时,从最后一个非叶子节点开始调整,逐步向上。交换堆顶元素后,重新调整堆结构,直到所有元素有序。

时间复杂度分析

堆排序的时间复杂度为O(n log n),其中构建堆的时间为O(n),每次调整堆的时间为O(log n)。堆排序是一种原地排序算法,空间复杂度为O(1)。

标签: php
分享给朋友:

相关文章

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php session实现购物车

php session实现购物车

PHP Session 实现购物车 初始化 Session 确保在使用 Session 前调用 session_start() 函数。通常放在 PHP 文件的最顶部。 <?php sessio…

php 实现锁

php 实现锁

PHP 实现锁的常见方法 文件锁(flock) 利用 flock 函数对文件进行独占锁定,适用于单机环境。 $fp = fopen("lockfile.lock", "w+"); if (f…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…