热门标签 | 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


推荐阅读
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 深入解析JMeter中的JSON提取器及其应用
    本文详细介绍了如何在JMeter中使用JSON提取器来获取和处理API响应中的数据。特别是在需要将一个接口返回的数据作为下一个接口的输入时,JSON提取器是一个非常有用的工具。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细介绍了Git分布式版本控制系统中远程仓库的概念和操作方法。通过具体案例,帮助读者更好地理解和掌握如何高效管理代码库。 ... [详细]
  • 本文介绍了如何利用npm脚本和concurrently工具,实现本地开发环境中多个监听服务的同时启动,包括HTTP服务、自动刷新、Sass和ES6支持。 ... [详细]
  • 本文介绍如何通过SSH协议使用Xshell远程连接到Ubuntu系统。为了实现这一目标,需要确保Ubuntu系统已安装并配置好SSH服务器,并保证网络连通性。 ... [详细]
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
  • 本文将带领读者深入了解Android系统源码在手机中的实际表现,通过详细的步骤和专业的解释,帮助你更好地理解Android系统的底层运作机制。 ... [详细]
  • 解决U盘安装系统后无法重启的问题
    本文详细探讨了运维新手常遇到的U盘安装系统后无法正常重启的问题,提供了从问题分析到具体解决方案的完整步骤。通过理解Boot Loader的工作原理和正确配置启动项,帮助用户顺利解决问题。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 本主题面向IT专业人士,介绍了Windows Server 2012 R2和Windows Server 2012中的组托管服务账户(gMSA),涵盖了其应用场景、功能改进、硬件和软件要求以及相关资源。 ... [详细]
  • 解决SVN图标显示异常问题的综合指南
    本文详细探讨了SVN图标无法正常显示的问题,并提供了多种有效的解决方案,涵盖不同环境下的具体操作步骤。通过本文,您将了解如何排查和修复这些常见的SVN图标显示故障。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 探讨 HDU 1536 题目,即 S-Nim 游戏的博弈策略。通过 SG 函数分析游戏胜负的关键,并介绍如何编程实现解决方案。 ... [详细]
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社区 版权所有