PHP基础之排序
前言
之前简单介绍了流程控制,函数,数组等。有兴趣的可以看看。
PHP入门之类型与运算符
PHP入门之流程控制
PHP入门之函数
PHP入门之数组
接下来介绍一下排序,排序是将一组数据,依指定的顺序进行排列的过程。常用的排序方法有冒泡法,选择排序法,插入排序法。
冒泡排序法
思想:
它重复走过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把它们交换过来,直到没有需要交换的为止。
代码案例:
<?php
#冒泡排序
$myarr=array(4,3,9,1,6,23.5);
function bubbleSort (&$myarr){
$temp=0; #N个数排序,要排N-1次。外层控制循环多少趟
for ($i=0;$i<count($myarr)-1;$i++){
#控制每一趟循环的次数。
for ($j=0;$j<count($myarr)-1-$i;$j++){
if ($myarr[$j]>$myarr[$j+1]){
$temp=$myarr[$j];
$myarr[$j]=$myarr[$j+1];
$myarr[$j+1]=$temp;
}
}
}
}
bubbleSort($myarr);
print_r($myarr); #打印数组
?>
输出结果为:
Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 6 [4] => 9 [5] => 23.5 )
选择排序法
思想:
假设第一个为最小(大)元素,依次比较,如果错误,交换顺序,找到未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
代码案例:
<?php
#选择排序
$myarr=array(4,3,9,1,6,23.5);
function selectionSort (&$myarr){
$temp=0;
for ($i=0;$i<count($myarr)-1;$i++){
#将第一个值认为是最小的值
$minval=$myarr[$i];
#记录最小值的下标
$minindex=$i;
for ($j=$i+1;$j<count($myarr);$j++){
if ($minval>$myarr[$j]){
$minval=$myarr[$j];
$minindex=$j;
}
}
$temp=$myarr[$i];
$myarr[$i]=$myarr[$minindex];
$myarr[$minindex]=$temp;
}
}
selectionSort($myarr);
print_r($myarr); #打印数组
?>
输出结果:
Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 6 [4] => 9 [5] => 23.5 )
插入排序
思想:
插入排序就像我们玩扑克牌,右手为乱排的,我们一张张查看,为它找合适的位置插入到左手的有序牌中。
插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序。
代码案例:
<?php
#插入排序
$myarr=array(4,3,9,1,6,23.5);
function insertSort (&$myarr){
for ($i=1;$i<count($myarr);$i++){
#这是要插入的数
$insertval=$myarr[$i];
#这是和插入的数进行比较
$insertindex=$i-1;
#满足条件说明我们还没有找到合适的位置
while ($insertindex>=0 && $insertval<$myarr[$insertindex]){
$myarr[$insertindex+1]=$myarr[$insertindex];
$insertindex--;
}
#插入(给$insertval找到合适的位置)
$myarr[$insertindex+1]=$insertval;
}
}
insertSort($myarr);
print_r($myarr);
?>
输出结果:
Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 6 [4] => 9 [5] => 23.5 )
小结
简单介绍了一下常用的三种排序方法,希望对大家有所帮助。
PHP基础之排序的更多相关文章
- 算法与数据结构基础 - 拓扑排序(Topological Sort)
拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序 ...
- 算法基础~链表~排序链表的合并(k条)
算法基础~链表~排序链表的合并(k条) 1,题意:已知k个已排序链表头结点指针,将这k个链表合并,合并后仍然为有序的,返回合并后的头结点. 2,方法之间时间复杂度的比较: 方法1(借助工具vector ...
- javascript-几个基础的排序算法
对这几个基础排序算法进行梳理,便于以后查看. /** * * 冒泡排序 * 从末尾开始相邻两数相互比较大小,满足条件就交换位置.循环每进行一次,即可确定第i位数的值. *冒泡排序的时间复杂度为O(n^ ...
- C#_基础:排序算法
//希尔排序 static int[] ShellSort(int[] array) { if (array != null) { int[] list = { 9, 5, 3, 2, 1 }; fo ...
- HDU 1069 基础动态规划+排序
题意 给出n种立方体石头 当且仅当一块石头的底部宽度长度都小于一块石头的时候才能放在上面 问最高能放多高?石头不限数目 然而同样一种石头采用同样的摆放方式 两快相同石头一定无法进行放置 所以 一块石头 ...
- iOS开发基础之排序
Objective-C 有排序的API,省了我们很多事. 主要有以下3种方法. NSComparator NSArray *unsortedArray = @[@5,@3,@8,@1,@7]; NSA ...
- python基础===八大排序算法的 Python 实现
本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一 ...
- Go基础之--排序和查找操作
排序操作主要都在sort包中,导入就可以使用了import("sort") 常用的操作 sort.Ints:对整数进行排序sort.Strings:对字符串进行排序sort.Flo ...
- python基础一 ------排序和查找算法
插入排序; 假设数组长度为n,先从第二个元素开始,与前一个元素比较,之后将较小的元素 放在前面,现在前两个元素是有顺序的,这时取第三个元素,与前一个元素(也就是第二个)比较,较小的放在前面 ...
- java基础 -- 经典排序
---- 冒泡排序 方法: 1.每次比较相邻的两个数 2. 小的交换在前面 3.每轮结束后最大的数交换到最后 代码实现: /* * 冒泡排序 * */ public class SortNum { ...
随机推荐
- 数据可视化之 图表篇(五) PowerBI图表不够炫酷?来看看这个
现在这个大数据时代,每时每刻.各行各业都在产生多种多样的海量数据,如何简单高效的来理解.挖掘这些数据,发现背后的见解就非常重要. 本文介绍这个图表就可以帮你快速发现海量数据背后的见解,微软研究院打造的 ...
- Linux06 /Python web项目部署
Linux06 /Python web项目部署 目录 Linux06 /Python web项目部署 1. 部署方式 2. 纯后端代码部署/CRM为例 1. 部署方式 2. crm项目详细部署步骤 3 ...
- PHP实现多继承
题问php是否支持多继承? 答案:不可以,只支持单继承. 如何实现多继承呢? 答案:可以使用 interface 或 trait 实现 . interface这里我们就不做过多的说明了,它的原理就是一 ...
- Python Hacking Tools - Web Scraper
Preparation: Python Libray in the following programming: 1. Requests Document: https://2.python-requ ...
- css 过渡样式 transition
过渡顾名思义就是就是样式改变的一个过程变化 简介 transition: property duration timing-function delay; 值 描述 transition-proper ...
- 从零开始一起学Blazor WebAssembly 开发(4)
登录模块基本完成了,登录主要用了以下几个点: 1.后端采用的Abp Vnext 框架,这个框架自带的IdentityServer4用户角色权限控制,这个框架登录研究了好一阵子,有几个坑这里说下: 1) ...
- linux日志朔源分析记录
lastlog 记录用户最后一次登录情况 只有root最近登录过 lastlog -u 用户名或者uid uid 直接在passwd文件中的低三位可以看到 lastb 记录用户用户登录失败的用户记录, ...
- Spring Security 实战干货:图解用户是如何登录的
1. 前言 欢迎阅读Spring Security 实战干货系列文章,在集成Spring Security安全框架的时候我们最先处理的可能就是根据我们项目的实际需要来定制注册登录了,尤其是Http登录 ...
- python基础--深浅copy(重点)
在此申明一下,博客参照了https://www.cnblogs.com/jin-xin/,自己做了部分的改动 深浅copy(重点) 先问问大家,什么是拷贝?拷贝是音译的词,其实他是从copy这个英文单 ...
- 使用Openresty构建认证网关
[入门]使用Openresty构建认证网关 lwhile关注 0.5092017.10.07 16:00:03字数 1,330阅读 4,112 在单体应用中, 我们可以通过 cookie + sess ...