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

PHP实现选择排序

选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

下面是一个用PHP实现选择排序的示例代码:

<?php
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;
}

// 示例数组
$array = [64, 25, 12, 22, 11];
echo "未排序数组: ";
print_r($array);

// 调用选择排序函数
$sortedArray = selectionSort($array);
echo "已排序数组: ";
print_r($sortedArray);
?>

代码解释:

  1. 函数定义selectionSort(&$array) 函数接收一个引用参数 $array,这样可以在函数内部直接修改原始数组。
  2. 外层循环for ($i = 0; $i < $n - 1; $i++),这个循环用于确定当前要排序的位置。
  3. 假设最小值$minIndex = $i,假设当前位置 $i 的元素为最小值。
  4. 内层循环for ($j = $i + 1; $j < $n; $j++),这个循环用于在未排序部分寻找最小值。
  5. 找到最小值:如果找到比当前假设最小值还小的元素,则更新 $minIndex
  6. 交换元素:如果找到的最小值不在当前位置 $i,则交换这两个元素的位置。
  7. 返回排序后的数组:函数返回排序后的数组。

输出:

未排序数组: Array
(
    [0] => 64
    [1] => 25
    [2] => 12
    [3] => 22
    [4] => 11
)
已排序数组: Array
(
    [0] => 11
    [1] => 12
    [2] => 22
    [3] => 25
    [4] => 64
)

这个示例展示了如何使用PHP实现选择排序算法,并成功对数组进行了排序。选择排序的时间复杂度是 O(n2),适用于小规模数据的排序。


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

相关文章:

  • 【视频】二维码识别:libzbar-dev、zbar-tools(zbarimg )
  • 如何配置 Gitea 的邮箱功能
  • Spring ApplicationListener
  • 51单片机基础 06 串口通信与串口中断
  • 电子应用设计方案-19:智能云饭锅系统方案设计
  • 10-单表查询
  • Rust宏系列教程—实现复杂派生宏
  • 以3D数字人AI产品赋能教育培训人才发展,魔珐科技亮相AI+教育创新与人才发展大会
  • 线程控制方法之wait和sleep的区别
  • 深入理解索引(二)
  • ubuntu搭建k8s环境详细教程
  • 「Mac玩转仓颉内测版28」基础篇8 - 元组类型详解
  • linux ollama安装没有sudo权限
  • Android 不同情况下使用 runOnUiThread
  • H.265流媒体播放器EasyPlayer.js H5流媒体播放器关于如何查看手机端的日志信息并保存下来
  • IIFE - 立即执行函数
  • Flutter:AnimatedIcon图标动画,自定义Icon通过延时Interval,实现交错式动画
  • C# 委托与事件
  • Linux——进程间通信之管道
  • docker 容器运行Ruoyi-cloud
  • 二.LoadBalancer负载均衡服务调用(1)
  • python代码制作数据集的测试和数据质量检测思路
  • SQL注入--DNSlog外带注入--理论
  • Android开发实战班 - 应用架构 - 单向数据流(Unidirectional Data Flow, UDF)
  • Java 8 Stream API 在数据转换中的应用 —— 将列表转换为映射
  • 怎么只提取视频中的声音?从视频中提取纯音频技巧