PHP实现插入排序

server/2024/11/28 9:44:54/

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

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)函数进行排序。
    • 输出已排序的数组。

运行结果:

php">未排序数组: 
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.ppmy.cn/server/145589.html

相关文章

根据后台数据结构,构建搜索目录树

效果图&#xff1a; 数据源 const data [{"categoryidf": "761525000288210944","categoryids": "766314364226637824","menunamef": "经济运行","menunames": "经济运行总览","tempn…

[java] 什么是 Apache Felix

概述 Apache Felix是一个开源的、符合OSGi&#xff08;Open Service Gateway Initiative&#xff09;R4规范的实现框架。OSGi是一个用于Java动态模块系统的一系列规范&#xff0c;而Apache Felix则是对这些规范的具体实现&#xff0c;它提供了一个轻量级的、高效的平台&#xf…

Linux操作系统2-进程控制3(进程替换,exec相关函数和系统调用)

上篇文章&#xff1a;Linux操作系统2-进程控制2(进程等待&#xff0c;waitpid系统调用&#xff0c;阻塞与非阻塞等待)-CSDN博客 本篇代码Gitee仓库&#xff1a;Linux操作系统-进程的程序替换学习 d0f7bb4 橘子真甜/linux学习 - Gitee.com 本篇重点&#xff1a;进程替换 目录 …

HarmonyOS开发者社区有奖征文二期活动开启!

HarmonyOS开发者社区有奖征文活动第二期如约而至&#xff01;在上一期的基础上&#xff0c;我们精心策划了更多样化的主题&#xff0c;旨在为开发者们提供一个更广阔的交流平台。无论您是想探讨HarmonyOS的技术细节&#xff0c;还是分享您的开发经验&#xff0c;或是记录您与Ha…

解决发布web接口时数据无法JSON化的问题

解决HTTP接口传输中的JSON序列化问题 引言 当涉及到复杂的数据类型时&#xff0c;如浮点数、Numpy数组、pandas等&#xff0c;直接使用Python的json模块进行序列化可能会遇到问题。本文将解决这些问题&#xff0c;并提供一个通用的方案&#xff0c;确保数据能够顺利地通过HTT…

d3-contour 生成等高线图

D3.js 是一个强大的 JavaScript 库&#xff0c;用于创建动态、交互式数据可视化。d3-contour 是 D3.js 的一个扩展模块&#xff0c;用于生成等高线图&#xff08;contour plots&#xff09;。 属性和方法 属性 x: 一个函数&#xff0c;用于从数据点中提取 x 坐标。y: 一个函…

Kubernetes 分布式存储后端:指南

在 Kubernetes 中实现分布式存储后端对于管理跨集群的持久数据、确保高可用性、可扩展性和可靠性至关重要。在 Kubernetes 环境中&#xff0c;应用程序通常被容器化并跨多个节点部署。虽然 Kubernetes 可以有效处理无状态应用程序&#xff0c;但有状态应用程序需要持久存储来维…

【算法day1】数组:双指针算法

题目引用 这里以 1、LeetCode704.二分查找 2、LeetCode27.移除元素 3、LeetCode977.有序数组的平方 这三道题举例来说明数组中双指针的妙用。 1、二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜…