当前位置: 首页 > article >正文

PHP实现插入排序

插入排序(Insertion Sort)是一种简单直观的排序算法,适用于少量数据的排序。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。以下是一个用PHP实现插入排序的示例代码:

<?php
function insertionSort(&$array) {
    $length = count($array);
    for ($i = 1; $i < $length; $i++) {
        $key = $array[$i];
        $j = $i - 1;

        // 将array[0..i-1]中大于key的元素向后移动一位
        while ($j >= 0 && $array[$j] > $key) {
            $array[$j + 1] = $array[$j];
            $j = $j - 1;
        }
        $array[$j + 1] = $key;
    }
}

// 测试插入排序
$array = [12, 11, 13, 5, 6];
echo "未排序数组: \n";
print_r($array);

insertionSort($array);

echo "已排序数组: \n";
print_r($array);
?>

代码解释:

  1. 函数定义
    • function insertionSort(&$array):定义一个名为insertionSort的函数,参数$array通过引用传递,这样可以直接修改原数组。
  2. 获取数组长度
    • $length = count($array):获取数组的长度。
  3. 外层循环
    • for ($i = 1; $i < $length; $i++):从数组的第二个元素开始遍历,因为第一个元素默认是已排序的。
  4. 保存当前元素
    • $key = $array[$i]:将当前元素保存到变量$key中。
    • $j = $i - 1:初始化索引$j为当前元素的前一个索引。
  5. 内层循环
    • while ($j >= 0 && $array[$j] > $key):在内层循环中,如果$j索引的元素大于$key,则将$j索引的元素向后移动一位。
    • $array[$j + 1] = $array[$j]:将$j索引的元素赋值给$j+1索引的位置。
    • $j = $j - 1:递减$j索引。
  6. 插入当前元素
    • $array[$j + 1] = $key:找到适当的位置后,将$key插入到该位置。
  7. 测试
    • 定义一个数组$array并输出未排序的数组。
    • 调用insertionSort($array)函数进行排序。
    • 输出已排序的数组。

运行结果:

未排序数组: 
Array
(
    [0] => 12
    [1] => 11
    [2] => 13
    [3] => 5
    [4] => 6
)
已排序数组: 
Array
(
    [0] => 5
    [1] => 6
    [2] => 11
    [3] => 12
    [4] => 13
)

这样,通过插入排序算法,数组就被成功排序了。插入排序的时间复杂度为O(n^2),在数据量较小或基本有序的情况下表现较好。


http://www.kler.cn/a/407163.html

相关文章:

  • 学习ASP.NET Core的身份认证(基于Cookie的身份认证2)
  • 安宝特分享 | 如何利用AR技术革新医疗实践:从远程急救到多学科协作
  • html5复习二
  • OpenCV和Qt坐标系不一致问题
  • 【人工智能】用Python和NLP工具构建文本摘要模型:使用NLTK和spaCy进行自然语言处理
  • 【Python系列】浅析 Python 中的字典更新与应用场景
  • 解决 Docker Desktop 启动报错:Docker Desktop is unable to detect a Hypervisor
  • gpt2的学习
  • LVM缩容
  • Chrome DevTools Protocol 进阶:DOM 域
  • 开放性实验——网络安全渗透测试
  • Flutter实现气泡提示框学习
  • 设计模式-创建型-抽象工厂模式
  • Android kotlin之配置kapt编译器插件
  • 微信小程序数据绑定与事件绑定详解:从入门到精通
  • Unity UI射线检测 道具拖拽
  • 网络安全与加密
  • Spring Boot 整合 Prometheus 实现资源监控
  • 全面提升系统安全:禁用不必要服务、更新安全补丁、配置防火墙规则的实战指南
  • 鸿蒙开发-音视频
  • AI赋能 Python编程之2. 从构思到优化:用AI快速实现Python项目
  • 【多线程-第一天-多线程的执行原理-多线程的优缺点-主线程 Objective-C语言】
  • Arcpy 多线程批量重采样脚本
  • 11 —— 打包模式的应用
  • 一站式学习:害虫识别与分类图像分割
  • 汽车加油行驶问题-动态规划算法(已在洛谷AC)