php冒泡算法
1.冒泡算法
网上搜了很多,但是总是对于每次循环的边界值思路讲的比较笼统。
不是很容易被新手记住,我自己平时也是硬记下来的。
但是对于算法,硬记,时间长了还是容易忘记,所以自己写了一次,把每次思路尽量写下来,便于理解,理解了容易加深映像,不容易忘记了。
冒泡算法,核心就是
1.循环比对 每次比对相邻2个数组的大小,然后把最大的数组放到后面,这样所有比对循环一次,就会把数组中最大的数放到数组最后,
2. 然后重复循环(重复上面的比对循环):此时循环的时候 最后一个值是不需要参加循环了,因为已经确定是最大的那个了。也就是说,重复循环,比对数组越来越少。最终只剩一个数组元素了。循环结束
代码层看,
$arr=array(5,4,3,6,7,1,2,10,8,9);
先从两两比对开始看
if($arr[$i]>$arr[$i+1]){//相邻比较 这个应该比较容易理解吧
$tem=$arr[$i];
$arr[$i]=$arr[$i+1];
$arr[$i+1]=$tem;
}
以上代码就是比对2个数组相邻的值大小,大的放后面。可以看出来 $i 最大就是数组索引前一位的,否则 $arr[$i+1]不存在了,无法比较。也就是说 $i<count($ar)-1;$i初始值为0
先从内层比对循环开始看
一般for循环 这么写
for($i=0;$i<$xx;$i++){
if($arr[$i]>$arr[$i+1]){//相邻比较 这个应该比较容易理解吧
$tem=$arr[$i];
$arr[$i]=$arr[$i+1];
$arr[$i+1]=$tem;
}
}
上面思路说了,每次比对循环都是从开头第一个元素开始 所以$i 起始值为0, 重复循环一次,下次循环就少比对一个元素。这里$xx要越来越小; 那这个$xx怎么确定呢?
$xx第一次循环值是多少 ?上面两两比对得出结论 count($ar)-1
$xx 最后一次值该是多少呢?上面两两比对得出结论 是1。
也就是说 $xx 为 count($arr)-$k $k是累加的 比对循环可改为(重复循环每循环一次)
for($i=0;$i<count($arr)-$k;$i++){
if($arr[$i]>$arr[$i+1]){//相邻比较
$tem=$arr[$i];
$arr[$i]=$arr[$i+1];
$arr[$i+1]=$tem;
}
}
再看这个$k 想想这个$k不就是随着重复循环在累增的吗? 把重复循环代码加上如下
for($k=1;$k<count($arr);$k++){
$xx = count($arr)-$k; //$k最大值为count($arr)-1 $k 初始值为count($arr)-1
for($i=0;$i<$xx;$i++){ //$xx最小值为 1 $xx最大值为 count($arr)-1
if($arr[$i]>$[$i+1]){ //$i最小值为0 $i最大值为 count($arr)-2
$temparr= $arr[$i];
$arr[$i] =$arr[$i+1];
$arr[$i+1] = $temparr;
}
}
}
我们再来看下$k是怎么确定边界值的 上面说了, $xx 边界值是 count($arr)-1 到 1 已经定义 那么数学算法 $k边界值也就出来了 为 1到 count($arr)-1
写入到循环里也就是 $k=1;$k<count($arr);$k++了。
整理下就是
for($k=1;$k<count($arr);$k++){
for($i=0;$i<count($arr)-$k;$i++){
if($arr[$i]>$[$i+1]){
$temparr= $arr[$i];
$arr[$i] =$arr[$i+1];
$arr[$i+1] = $temparr;
}
}
}
语言组织待完善,欢迎反馈@
php冒泡算法的更多相关文章
- 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)
阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...
- 冒泡算法C#
冒泡算法C# namespace数组排序 { classProgram { staticvoidMain(string[]args) { inttemp=; ,,,,,,,,}; #region该段与 ...
- Python函数练习:冒泡算法+快速排序(二分法)
冒泡算法: #-*- coding: UTF-8 -*-#冒泡排序 def func(lt):if type(lt).__name__ !='list' and type(lt).__name__ ! ...
- javascript之冒泡算法
今天看了js中数组的方法,其中sort()方法用于排序,就让我想到学C语言的时候有一个冒泡算法,就想用js写一个. <script> var arr=[1,30,20,40,21,31,1 ...
- 冒泡算法(C++模板实现)
冒泡排序 从整体上看,冒泡排序是一种稳定排序,即排序完成后,原本序列中的键值相等的元素相对位置不会发生改变.算法的时间复杂度是O(n2),空间复杂度为O(1),即这是一个"就地算法" ...
- php的冒泡算法
<?php /* 冒泡算法 * @para $arr 传人进去排序的数组 * @return $newArr 排序之后的数组 */ function maopao($arr){ ...
- python学习之路-6 冒泡算法、递归、反射、os/sys模块详解
算法 冒泡算法 # 冒泡算法就是将需要排序的元素看作是一个个"气泡",最小的"气泡"最先浮出水面,排在最前面.从小到大依次排列. # 代码如下: li = [9 ...
- Python冒泡算法和修改配置文件
先学习之前未完成的冒泡算法 li = [13,22,6,99,11] 从小到大 从第一个数字比较把大的往后移位 for m in range(4): num1 = li[m] num2 = li[m+ ...
- Python之collections序列迭代器下标式循环冒泡算法等
练习题 元素分类 有如下值集合[11,22,33,44,55,66,77,88,99]将所有大于66的数作为一个列表放在字典的key为k1的value小于等于66的为k2的value {'k1':[7 ...
- Python系列之文件操作、冒泡算法、装饰器、及递归
文件处理 python对文件进行读写操作的方法与具体步骤,包括打开文件.读取内容.写入文件.文件中的内容定位.及关闭文件释放资源等 open().file(),这个两函数提供了初始化输入\输出(I\O ...
随机推荐
- 校园商铺-2项目设计和框架搭建-9验证Service
1. 新建接口 main: com.csj2018.o2o.service/AreaService.java package com.csj2018.o2o.service; import java. ...
- day16 python-04 字典
Python之路,Day3 = Python基础4 # is 比较id # == 比较数值 # type(1) is type(2) 比较两个变量的类型是否相同 a = 1 b = 1 c = ' p ...
- 跨域问题The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by t
withCredentials 属性 上面说到,CORS请求默认不发送Cookie和HTTP认证信息.如果要把Cookie发到服务器,一方面要服务器同意,指定Access-Control-Allow- ...
- 模式识别原理(Pattern Recognition)、概念、系统、特征选择和特征
§1.1 模式识别的基本概念 一.广义定义 1.模式:一个客观事物的描述,一个可用来仿效的完善的例子. 2.模式识别:按哲学的定义是一个“外部信息到达感觉器官,并被转换成有意义的感觉经验”的过程. 例 ...
- Django项目:堡垒机(Linux服务器主机管理系统)--02--02堡垒机设计后台交互程序
#main.py #本文件写所有的连接交互动作程序 #————————————————02堡垒机设计后台交互程序 开始———————————————— from django.contrib.auth ...
- hadoop高可用HA的配置
zk3 zk4 zk5 配置hadoop的HA大概可以分为以下几步: 配置zookpeer(namenode之间的通信要靠zk来实现) 配置hadoop的 hadoop-env.sh hdfs-sit ...
- nginx css,js合并插件,淘宝nginx合并js,css插件
先下载Nginx_concat_module,下载后把它放在/usr/local/src/文件夹中,新建文件夹nginx-http-concat把下载的config ngx_http_concat_ ...
- Mybatis功能架构及执行流程
原文地址:http://blog.51cto.com/12222886/2052647 一.功能架构设计 功能架构讲解: 我们把Mybatis的功能架构分为三层: (1) API接口层:提供给外部使用 ...
- docker-compose (单机版的容器编排工具)
类似于ansible剧本 yml 格式 要使用这个编排工具,必须先安装 yum install -y docker-compose cd wordpress/ vi docker-compose.ym ...
- java_过滤器
/** 过滤器: * File类中有两个和listFiles方法重载的方法,方法的参数就是过滤器 * listFiles(FileFilter filter) * java.io.FileFilter ...