热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP排序算法详解:冒泡、选择、插入、希尔与堆排序

本文详细介绍了五种常用的PHP排序算法——冒泡排序、选择排序、插入排序、希尔排序和堆排序。每种算法都附有代码示例,并通过打印和延时操作来直观展示排序过程。欢迎指出任何错误。

本文旨在深入探讨PHP中的几种经典排序算法,包括冒泡排序、选择排序、插入排序、希尔排序和堆排序。每种算法的实现代码中加入了打印和延时(sleep)功能,以便观察排序过程中的变化。若有任何错误或建议,欢迎指正。

$arr = [3, 4, 6, 1, 7, 8, 9, 5, 10, 2];

// 冒泡排序:通过两两比较相邻元素,较大的元素向后移动,较小的元素向前移动。

$max = count($arr) - 1;

$flag = true;

for ($i = 0; $i <$max && $flag; $i++) {

$flag = false;

for ($j = $max - $i; $j > 0; $j--) {

if ($arr[$j] <$arr[$j - 1]) {

$tmp = $arr[$j - 1];

$arr[$j - 1] = $arr[$j];

$arr[$j] = $tmp;

$flag = true;

}

echo $i . '次' . PHP_EOL;

var_dump($arr) . PHP_EOL;

sleep(1);

}

}

// 选择排序:遍历数组,选择最小的元素并将其放置在当前遍历位置的开头。

for ($i = 0; $i <$max; $i++) {

$min = $arr[$i];

for ($j = $i + 1; $j <$max; $j++) {

if ($arr[$j] <$min) {

$min = $arr[$j];

$arr[$j] = $arr[$i];

$arr[$i] = $min;

}

var_dump($arr) . PHP_EOL;

}

sleep(1);

}

// 插入排序:从第二个元素开始,与前面的元素比较,如果当前元素小于前面的元素,则将前面的所有元素向后移动,为当前元素腾出空间。

$max = count($arr);

for ($i = 1; $i <$max; $i++) {

if ($arr[$i - 1] > $arr[$i]) {

$tmp = $arr[$i];

for ($j = $i - 1; $j >= 0 && $arr[$j] > $tmp; $j--) {

$arr[$j + 1] = $arr[$j];

$arr[$j] = $tmp;

}

var_dump($arr) . PHP_EOL;

sleep(1);

}

}

// 希尔排序:通过设定一定的增量,对数组进行分组,然后对每个小组进行插入排序。

public function shellSort($arr) {

$total = count($arr);

$inc = $total;

do {

$inc = ceil($inc / 2);

for ($i = $inc; $i <$total; $i++) {

if ($arr[$i - $inc] > $arr[$i]) {

$tmp = $arr[$i];

for ($j = $i - $inc; $j >= 0 && $arr[$j] > $tmp; $j -= $inc) {

$arr[$j + $inc] = $arr[$j];

$arr[$j] = $tmp;

}

var_dump($arr) . PHP_EOL;

sleep(1);

}

}

} while ($inc > 1);

return $arr;

}

// 堆排序:通过构建最大堆,将最大值移到数组末尾,再调整堆,重复此过程直到排序完成。

public function heapSort() {

$arr = [3, 4, 6, 1, 7, 8, 9, 5, 10, 2];

$total = count($arr);

// 构建初始最大堆

for ($i = $total / 2 - 1; $i >= 0; $i--) {

$this->adjustHeap($arr, $i, $total);

}

// 将最大值移到数组末尾,并调整堆

for ($j = $total - 1; $j > 0; $j--) {

$this->swap($arr, 0, $j);

$this->adjustHeap($arr, 0, $j);

}

}

public function adjustHeap(&$arr, $i, $total) {

$tmp = $arr[$i];

for ($k = $i * 2 + 1; $k <$total; $k = $k * 2 + 1) {

if ($k + 1 <$total && $arr[$k] <$arr[$k + 1]) {

$k++;

}

if ($arr[$k] > $tmp) {

$arr[$i] = $arr[$k];

$i = $k;

}

}

$arr[$i] = $tmp;

}

public function swap(&$arr, $a, $b) {

$tmp = $arr[$a];

$arr[$a] = $arr[$b];

$arr[$b] = $tmp;

var_dump($arr) . PHP_EOL;

}

转自:https://www.cnblogs.com/liyante/p/11095740.html


推荐阅读
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 深入解析JMeter中的JSON提取器及其应用
    本文详细介绍了如何在JMeter中使用JSON提取器来获取和处理API响应中的数据。特别是在需要将一个接口返回的数据作为下一个接口的输入时,JSON提取器是一个非常有用的工具。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
  • 本文将带领读者深入了解Android系统源码在手机中的实际表现,通过详细的步骤和专业的解释,帮助你更好地理解Android系统的底层运作机制。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
author-avatar
贺群爱你_235
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有