php 四种排序

一步步教你使用 NVIDIA 推出的全新GPU加速求解器 cuOpt:解锁超高效率的求解体验 未完成 阅读详情

原文地址http://www.php100.com/html/dujia/2015/0210/8604.html

许多人都说算法是程序的核心,算法的好坏决定了程序的质量。作为一个初级phper,虽然很少接触到算法方面的东西。但是对于基本的排序算法还是应该掌握的,它是程序开发的必备工具。这里介绍冒泡排序,插入排序,选择排序,快速排序四种基本算法,分析一下算法的思路。

前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序。 
$arr(1,43,54,62,21,66,32,78,36,76,39);
 

1. 冒泡排序

思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

代码实现:
$arr=array(1,43,54,62,21,66,32,78,36,76,39);  
function bubbleSort($arr)
{  
  $len=count($arr);
  //该层循环控制 需要冒泡的轮数
  for($i=1;$i<$len;$i++)
  { //该层循环用来控制每轮 冒出一个数 需要比较的次数
    for($k=0;$k<$len-$i;$k++)
    {
       if($arr[$k]>$arr[$k+1])
        {
            $tmp=$arr[$k+1];
            $arr[$k+1]=$arr[$k];
            $arr[$k]=$tmp;
        }
    }
  }
  return $arr;
}

 

2. 选择排序 

思路分析:在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

代码实现:
function selectSort($arr) {
//双重循环完成,外层控制轮数,内层控制比较次数
 $len=count($arr);
    for($i=0; $i<$len-1; $i++) {
        //先假设最小的值的位置
        $p = $i;
        
        for($j=$i+1; $j<$len; $j++) {
            //$arr[$p] 是当前已知的最小值
            if($arr[$p] > $arr[$j]) {
            //比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。
                $p = $j;
            }
        }
        //已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。
        if($p != $i) {
            $tmp = $arr[$p];
            $arr[$p] = $arr[$i];
            $arr[$i] = $tmp;
        }
    }
    //返回最终结果
    return $arr;
}

 

3.插入排序

思路分析:在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

代码实现:
function insertSort($arr) {
    $len=count($arr); 
    for($i=1, $i<$len; $i++) {
        $tmp = $arr[$i];
        //内层循环控制,比较并插入
        for($j=$i-1;$j>=0;$j--) {
            if($tmp < $arr[$j]) {
                //发现插入的元素要小,交换位置,将后边的元素与前面的元素互换
                $arr[$j+1] = $arr[$j];
                $arr[$j] = $tmp;
            } else {
                //如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。
                break;
            }
        }
    }
    return $arr;
}

 

4.快速排序  

思路分析:选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。

代码实现:
function quickSort($arr) {
    //先判断是否需要继续进行
    $length = count($arr);
    if($length <= 1) {
        return $arr;
    }
    //选择第一个元素作为基准
    $base_num = $arr[0];
    //遍历除了标尺外的所有元素,按照大小关系放入两个数组内
    //初始化两个数组
    $left_array = array();  //小于基准的
    $right_array = array();  //大于基准的
    for($i=1; $i<$length; $i++) {
        if($base_num > $arr[$i]) {
            //放入左边数组
            $left_array[] = $arr[$i];
        } else {
            //放入右边
            $right_array[] = $arr[$i];
        }
    }
    //再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数
    $left_array = quick_sort($left_array);
    $right_array = quick_sort($right_array);
    //合并
    return array_merge($left_array, array($base_num), $right_array);
}

实战:RK3568 Android14 集成 AP6212A WiFi/BT 二合一模块 AP6212A 的集成在 RK3568 上非常成熟。只要电源、32K 时钟、SDIO 线序、UART 流控这四点硬件没问题,软件上主要是 DTS 对应的 GPIO 别填错即可。希望这篇博文能帮你一次点亮 WiFi 和蓝牙! 阅读详情

相关推荐

VL53L0X测距不准?手把手教你做RefSPAD校准与环境补偿(附Arduino/STM32代码)

本文详细解析了VL53L0X激光测距传感器精度不足的原因,并提供了RefSPAD校准与环境补偿的完整解决方案。通过Arduino和STM32代码示例,手把手教你实现毫米级测距稳定性,适用于机器人避障、工业检测等场景。

weixin_28744423的博客 257

php 4大排序算法及二分法查找

php排序算法及二分法查找 插入排序 思想:将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。 要点:设立哨兵,作为临时存储和判断数组边界之用。 function insertSort($arr){ $count=count($arr); for($i=1;$i<$count;$i++){ $j=$i-1;...

weixin_43452467的博客 554

Unity Spine 3.8 (URP) 踩坑(Shader报错修改)

提供了新思路,打算尝试一下URP。但美术使用的spine版本是3.8,项目用的Unity2021.3.11f1c2,直接导入spine URP包,shader报错:half4 不能转成 SurfaceData2D;Spine-Sprite-StandardPass-URP-2D.hlsl 也报这个错,也是同样的改法即可。今天搜索spine优化,看到一篇文章。

hrlr1230的博客 4568

php实现4种排序算法

文章来自“PHP100中文网” 前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序。 $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的...

柯烽博客 504

PPO算法详解:基于CartPole-v1的强化学习实现

PPO算法详解:基于CartPole-v1的强化学习实现

m0_54720701的博客 865

433MHz无线通信避坑指南:如何解决信号干扰和误码问题

本文深入探讨433MHz无线通信中的信号干扰和误码问题,提供从射频前端设计到协议优化的全链路解决方案。通过天线匹配、电源噪声抑制、曼彻斯特编码改进及实时频点切换等技术,显著提升通信稳定性和距离。适合智能家居和工业无线控制系统的开发者参考。

weixin_29288313的博客 417

php根据其中一个值排序,php数组怎么根据其中的一个值进行排序?解决方法

有一个数组如下 我想对其进行一个排序,按照其“sort”的值的大小进行排序,3->4->7。解决方法如下:1、首先介绍php的两个方法方法一:array_column() 返回输入数组中某个单一列的值。php版本 5.5+。参数描述array必需。规定要使用的多维数组(记录集)。column_key必需。需要返回值的列。可以是索引数组的列的整数索引,或者是关联数组的列的字符串键值。该参...

weixin_36087083的博客 1336

ad23新版Geber导出-官方教程(22.11版本后)

AD23新版本geber文件导出(含官方教程)-22.11之后的版本均可用此教程

安和的博客 3万+

PHP数组排序教程

usort():使用用户自定义的比较函数对数组中的值进行排序。uasort():与 usort() 类似,但保持索引关系。uksort():使用用户自定义的比较函数对数组中的键进行排序。

Java程序员_编程开发学习笔记_网站安全运维教程_渗透技术教程 1449

Xilinx ZYNQ 7000学习笔记二(FSBL代码分析启动-汇编代码)

Xilinx ZYNQ 7000学习笔记

u011116085的博客 4246

从零到一:STM32CubeMX虚拟串口开发中的常见陷阱与优化策略

本文深入探讨了STM32CubeMX在USB虚拟串口开发中的常见问题与优化策略,涵盖数据流吞吐量瓶颈、实时性约束等核心挑战。通过实战案例和代码示例,详细解析了波特率同步异常、数据丢失等问题的解决方案,并提供了DMA配置和中断优先级调优的高级技巧,帮助开发者提升STM32虚拟串口的性能和可靠性。

weixin_29164185的博客 370

PHP数组根据值排序的探讨

简单来说,就是根据数组中的值(而非键)进行排序,使得数组中的元素按照一定的顺序排列。而经过排序的数组,其元素按照一定的顺序排列,使得我们可以更快地定位到所需的数据。通过合理地选择和使用PHP提供的排序函数和算法,我们可以实现对数组的高效排序和管理,从而满足各种业务需求和提高程序的性能。如果我们对数组中的元素没有特殊的要求(比如保持键名与值的关联关系),那么我们可以选择使用。在PHP中,我们可以使用多种函数来实现数组根据值的排序。函数传递一个自定义的比较函数作为参数,我们可以按照自己的需求对数组进行排序。

2401_86114608的博客 538

PyTorch实战(19)——变分自编码器(Variational Autoencoder,VAE)

变分自编码器 (Variational Autoencoder, VAE) 是一种结合了自编码器和概率建模的生成模型,通过编码器将输入数据映射到潜在空间中的概率分布,并通过解码器将从潜在空间采样得到的潜在变量映射回原始数据空间,实现了数据的生成和特征学习。本节中,将介绍变分自编码器的基本概念,并使用 PyTorch 实现变分自编码器生成新图像。

盼小辉丶的博客 2898

四种排序算法PHP实现类

四种排序算法的PHP实现: 1) 插入排序(Insertion Sort)的基本思想是:  每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。 2) 选择排序(Selection Sort)的基本思想是:  每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。 3) 冒泡排序的基

hello_katty的专栏 1552

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

PHP四种排序方式

PHP的四种排序方式 1.冒泡排序 2.插入排序 3.快速排序 5.选择排序

苏程宽的博客 634

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

php四种排序,PHP四种排序

ini_set("error_reporting","E_ALL & ~E_NOTICE");/** PHP各类排序算法总结*/$arr = array();$bubblearr = array();$selectarr = array();for($i = 0;$i<2000;$i++){$arr[$i]=rand(1,9999999);}/** bubble_sort_start...

weixin_30146171的博客 123

php必须掌握的四种基础排序算法

php必须掌握的四种基础排序算法冒泡排序快速排序选择排序插入排序 冒泡排序 一个一个往外冒 //冒泡 function bubble($arr){ $len = count($arr); for($i = 1; $i < $len; $i++){ for($k = 0; $k < $len - $i; $k++){ if($arr[$k] > $arr[$k+1]){ $tmp = $arr[$k+1]; $arr[$k+1] = $arr[$k];

Niche_的博客 287

PHP实现四种基本排序算法

今天去面试, 让写一个冒泡算法,下面就来总结下一下的几个PHP排序算法。 <?php //1. 冒泡排序 $arr = array(1,2,3,7,6,4,5,9); //思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。 function...

wccczxm的专栏 203

php常用的四种排序算法,PHP四种基本排序算法实例

php的排序真的那么重要吗? 我整了好几年代码,这4种算法就使用过一次,冒泡排序,因为需求比较特殊,说实话4种算法我真是没用过也不会,有时候你不能不会,虽然你用不到,我感觉数据库设计好,数据处理好,就完全可以直接来用,一般情况下不必要再排序一次,分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序。$arr(1,43,54,62,21,66,32,78,3...

weixin_36286464的博客 112

php 四种排序,实例详解php中的四种排序算法 (附代码)

这篇文章主要介绍了php中的四种排序算法,有一定的参考价值,感兴趣的朋友可以一下,希望可以帮助到你!(1)快速排序原理:选择数组中的一个数(通常是第一个数)作为基准,在排序过程中,定义两个数组。第一次比较时,将大于它的数放在右边数组中,将小于它的数放在左边数组中。接下来采用递归的方式将左右两边的数组做同样处理,直到数组中只剩一个元素的时候结束递归,最后将数组合并。function quick_so...

weixin_34805229的博客 518

php 各种排序算法,PHP四种常见排序算法

一、冒泡排序:冒泡排序可以说是最常见,也是最简单,最经典的排序算法了。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。/*** [bubbleSort 冒泡排序]* @param [array] $arr [待排序数组]* @return [array] [排序后数组]*/fun...

weixin_39548776的博客 214

用php实现四种常见的排序算法

用php实现四种常见的排序算法 几种常见的排序 排序是一个程序员的基本功,对于初级phper,更是可以通过排序算法来锻炼自己的思维能力。 所谓排序,就是对一组数据,按照某个顺序排列的过程。下面就总结四种常用的php排序算法,分别是冒泡排序,选择排序,插入排序以及快速排序。 一,冒泡排序(Bubble sort) 在几种排序中,个人认为冒泡排序相对而言是比较简单也是非常常用的一种排序方法。 基本思想:如下图所示,将一组数据看作一排竖着的气泡,然后让最后一个数与倒数第二个数进行比较,大的就往前移。然后用相同的方

jianghulangzhongshen的博客 309

php的四种基本排序

冒泡排序: &lt;?php function bubblesort($arr) { $len=count($arr); for($i=0;$i&lt;$len-1;$i++) { $flag = false; for ($j = $i + 1; $j &lt; $len; $j++) { if ($arr[$i] &g...

Jack_mile的博客 303

PHP的四种基本排序方法

转载来源:http://www.php100.com/html/php/rumen/2013/1029/6333.html 许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣。作为一个初级phper,虽然很少接触到算法方面的东西 。但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要掌握的。下面是我按自己的理解,将四个方法分析一遍。 需求:分别用 冒泡排

JerryKing 1368

PHP四种排序归纳与实现

PHP四种排序归纳与实现 排序:对一组数据,依据指定的规则顺序进行排列的过程! 1.冒泡排序 选定一个较大的元素为基准与前一个元素进行比较,较大的值下沉较小的值上升 算法:对一个数组进行循环比较,第一层循环比较次数为数组长度减一,其他内层循环为外层循环的次数减一 2.优化 排序比较耗费资源,通过优化可以使一些有序数组不进行循环排序,从而节约资源,减少访问时间 function maopao(&$arr) { //确定数组长度 $arr_size = count($arr);

丿靈魂灬燈芐舞的博客 322

php设置排序,PHP的四种基本排序整理

1. 冒泡排序functionbubbleSort($arr){if(!is_array($arr))returnfalse;$len=count($arr);if($len<=1)return$arr;//控制需要处理冒泡次数for($i=1;$ifor($k=0;$k$arr[$k+1]){$tmp=$arr[$k]...

weixin_39976575的博客 83
上一篇: linux curl操作
下一篇: 扩展名获取
vm021
博客等级 码龄11年 6粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值