php排序算法

一,冒泡排序
	冒泡排序是最简单最通用的一种排序,基本思想:在一组数据中,每次将相邻的两个数来比较,如果前面的数比后面的数大,就交换两个数的位置,否则不交换。由此可得,在排序过程中,大的数据往下沉,小的数据往上浮,就像气泡一样,于是将这种排序算法形象地称为冒泡排序。

设数组长度为N。
1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成。

function bubble_sort($arr){$count=count($arr) - 1;for($i=0;$i<$count;$i++){for($j=0;$j<$count-$i;$j++){if($arr[$j] > $arr[$j+1]){$tmp=$arr[$j];$arr[$j]=$arr[$j+1];$arr[$j+1]=$tmp;}}}return $arr;
}
$newarr=bubble_sort(['10','4','9','3']);

分析:外层遍历,i=0的时候,就是拿 10 和内层 [‘10’,‘4’,‘9’,‘3’] 依次做比较,如果 a r r [ arr[ arr[j] 大于 a r r [ arr[ arr[j+1],那就两个元素交换位置。交换完之后是 4,10,9,3;此时j=1,比较并交换位置之后 为 4,9,10,3 。直到第一轮遍历完之后为 4,9,3,10 。每进行一轮内层遍历,都会让一个最大的数到最后一个位置。
第二轮,i=1,手机用4,9,3,10遍历比较完之后为 4,3,9,10

二,快速排序
它以递归的方式对待排序数据进行排序。快速排序的基本思路是将待排序数据序列划分成两个子序列,一个子序列中所有元素都比另一个子序列中的元素小(或大),再对这两个子序列递归进行快速排序,直到每个子序列只有一个元素为止。

1.从数列中挑出一个元素,称为“基准值”;
2.将待排序元素进行分区,比基准值小的元素放在基准值前面,比基准值大的元素放在基准值后面。分区结束后,该基准值就处于数组的中间位置;
3.对左右两个分区重复以上步骤直到所有元素都是有序的。

function fast_sort($arr){//如果数组长度小于等于1,直接返回数组if(count($arr)<=1){return $arr;}//选择一个基准元素,可以是数组中任意一个,将数组分成两部分$povit=$arr[0];$left=$right=array();$count=count($arr);for($i=1;$i<$count;$i++){if($arr[$i] < $povit){$left[]=$arr[$i];}else{$right[]=$arr[$i];}}//递归的对左右两个子数组进行分割排序,最后将结果合并return array_merge(fast_sort($left),array($povit),fast_sort($right));
}var_dump(fast_sort([10,4,9,3,2]));
三,插入排序
从数组第二位开始遍历,和前面的数比较,符合就互换位置,直到遍历所有数
function insert_sort($arr) {$count = count($arr); //计算排序元素个数/*** 第一层循环用于从未排序区域中取出待排序元素,并逐步缩小未排序区域,* 第二层循环用于从已排序区域中寻找插入位置      * */for ($i = 1; $i < $count; $i++){//获得当前需要比较的元素值$temp = $arr[$i];//内层循环控制 比较 并 插入for ($j = $i-1; $j >= 0; $j--)  {/*** $temp需要插入的元素;* $arr[$j]需要比较的元素*/if($arr[$j] > $temp){/*** 发现插入的元素要小,交换位置* 将后边的元素与前面的元素互换*/$arr[$j+1] = $arr[$j];//将前面的数设置为当前需要交换的数$arr[$j] = $temp;}}} //将这个元素 插入到已经排序好的序列内,返回return $arr;
}
var_dump(insert_sort([10,4,9,3,2]));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/854358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

join和left join性能比较

1、join和left join性能比较&#xff08;AI生成&#xff09; 在MySQL中&#xff0c;JOIN和LEFT JOIN的效率并不是绝对的&#xff0c;它们之间的性能差异取决于多种因素&#xff0c;如表的大小、使用的索引、查询的复杂性等。 一般来说&#xff1a; 如果两个表之间的连接条件能…

设备保养计划不再是纸上谈兵,智能系统让执行更到位!

在物业管理的日常工作中&#xff0c;我们常常听到“设备保养台账”“设备保养计划”“设备保养记录”等等这些词&#xff0c;但你是否真正了解它们的含义&#xff1f;是否知道一个完善的设备保养计划、记录、台账对于物业运营的重要性&#xff1f;今天&#xff0c;我们就来深入…

【车载开发系列】基本通信总线常识及通信协议

【车载开发系列】基本通信总线常识及通信协议 基本通信总线常识及通信协议 【车载开发系列】基本通信总线常识及通信协议一. 协议分类二. 通信方式分类三. 同步和异步四. 波特率五. 通讯协议横向比对六. 通讯协议总结一. 协议分类 常见通信协议通常可以分为并行通信协议和串行…

[鹤城杯 2021]BabyRSA

题目&#xff1a; from Crypto.Util.number import getPrime, bytes_to_long from secret import flagp getPrime(1024) q getPrime(1024) n p * q e 65537 hint1 p >> 724 hint2 q % (2 ** 265) ct pow(bytes_to_long(flag), e, n) print(hint1) print(hint2) p…

3大法则教你高效制定奖励规则(含参考案例)

在实施全民分销的过程中&#xff0c;SaaS产品方和合作伙伴推广者之间的合作关系可以用河马与牛椋鸟之间的共生关系来形容——牛椋鸟以栖息在河马背上并清理其身上的昆虫为生。这种关系对两者来说都是极其有益的&#xff1a;牛椋鸟获得了稳定的食物来源&#xff0c;而河马则有效…

使用宝塔面板部署Django应用(不成功Kill Me!)

使用宝塔面板部署Django应用 文章目录 使用宝塔面板部署Django应用 本地操作宝塔面板部署可能部署失败的情况 本地操作 备份数据库 # 备份数据库 mysqldump -u root -p blog > blog.sql创建requirements # 创建requirements.txt pip freeze > requirements.txt将本项目…

梳理Y3游戏编辑器入门者需要明白的基础概念

前言 Y3编辑器是网易开发的一款类似于“War3地图编辑器”的产品。 最近KK对战平台上不少热门的RPG地图都出自Y3编辑器&#xff1a; 最近我花了些时间学习了这款编辑器的基础知识。我发现其中很多概念是比较抽象需要理解的&#xff0c;而有些概念比如“物件”、“物体”、“物…

【CSS】background-clip属性的作用是什么,怎么使用?

CSS中的background-clip属性主要用于控制背景的渲染区域&#xff0c;即指定元素背景所在的区域。具体来说&#xff0c;它决定了背景图像或颜色应该在哪些区域被裁剪或显示。 background-clip属性的使用方法&#xff1a; 属性值&#xff1a; border-box&#xff1a;默认值。背景…

二叉树-根据先序遍历和中序遍历序列重建二叉树

目录 一、问题描述 二、解题思路 1.首先明确先序遍历和中序遍历的性质&#xff1a; 2.确定根节点及左右子树 3.对子树进行递归操作 4.递归返回条件 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 1.首先明确先序遍历和中序遍历的性质&#xff1a; 先序遍历&am…

Excel和Word等工具小技能分享汇编(一)

这里汇集刘小生前期微信公众号分享的Excel和Word等工具小技能&#xff0c;为方便大家查看学习&#xff0c;刘小生对其进行分类整理&#xff0c;后期也会不定期整理更新&#xff0c;如有想学习交流或其他小技巧需求&#xff0c;欢迎留言&#xff0c;我们一起学习进步&#xff01…

探索比特币多面体

目录 前言 一、比特币挖矿 1.挖矿设备的演化 2.矿池 二、比特币脚本 1.交易结构 2.交易的输入 3.交易的输出 4.P2PK 输入输出脚本的形式 实际执行情况 5.P2PKH 输入输出脚本的形式 实际执行情况 6.P2SH 输入输出脚本的形式 7.进一步说明 8.多重签名 9.脚本执…

DBA常用论坛

1.ITPUB ITPUB技术论坛_专业的IT技术社区 2.ASKTOM Ask TOM

2024 6.10~6.16 周报

一、上周工作 完成毕设 二、本周计划 吴恩达的机器学习、实验-回顾之前密集连接部分&#xff0c;调整损失函数 三、完成情况 3.1 机器学习的两种主要类型&#xff1a; 监督学习&#xff08;supervised learning&#xff09;&#xff08;实际中使用最多的&#xff09;&…

shell 查看第700行的内容

在Shell中&#xff0c;如果你想查看一个文本文件的第700行内容&#xff0c;可以使用sed命令或者head结合tail命令来实现。下面是两种方法&#xff1a; 使用sed命令 sed -n 700p 文件名 这里的-n选项告诉sed不要打印所有行&#xff0c;而700p表示只打印第700行。 使用head和tai…

Python 使用print输出二进制文件时产生的错位

项目实践中&#xff0c; with open(fileName, rb) as f: result f.read()print(result)f.close()打开二进制文件&#xff0c;打印出的结果会出现有些\x后面有好几个字符的情况 但实际这串数字是 这种情况是因为print函数将二进制数据解释为字符串并以其字节值的十六进制表…

Java中如何自定义异常进行抛出,并且定义全局异常处理类进行捕获异常(详细讲解)?

1.先理解为什么要抛出异常&#xff1f; 一句话就是为了终止程序&#xff0c;一般是终止业务层也就是service层。 2.为什么要自定义异常抛出&#xff1f; 因为系统提供的异常种类很多&#xff0c;而且代表的含义很多&#xff0c;所以我们需要自己定义一个通用的异常&#xff0…

白帽子最喜欢用什么渗透测试工具?看看哪些是你用过的

一、白帽子最喜欢用什么安全工具? 2020 年的 HackerOne 黑客报告中,统计过白帽子们最喜欢用的软硬件工具。 从图中可以看到,89% 的白帽子都会使用 Burp Suite 这个 Web 应用安全测试工具,有 39% 会尝试自己写工具,第三名的 Fuzzers 是模糊测试工具。再后面主要是一些代理…

STM32-17-DAC

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU STM32-14-FSMC_LCD STM32-15-DMA…

k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案

文章目录 OpenKruise简介OpenKruise来源OpenKruise是什么&#xff1f;核心组件有什么&#xff1f;有什么特性和优势&#xff1f;适用于什么场景&#xff1f; 什么是OpenKruise的原地升级原地升级的关键特性使用原地升级的组件原地升级的工作原理 应用环境一、OpenKruise部署1.安…

ThreadLocal 详讲

ThreadLocal ThreadLocal是一个将在多线程中为每一个线程创建单独的变量副本的类; 当使用ThreadLocal来维护变量时, ThreadLocal会为每个线程创建单独的变量副本, 避免因多线程操作共享变量而导致的数据不一致的情况。 ThreadLocal 使用 public class ThreadLocalTest {priv…