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 ...
随机推荐
- npm run server报错
从git上clone的vue项目npm install后npm run server报错 $ npm run dev > lufei@1.0.0 dev E:\pythonProject\luf ...
- System.Web.Mvc.HttpHeadAttribute.cs
ylbtech-System.Web.Mvc.HttpHeadAttribute.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, ...
- <scrapy爬虫>scrapy命令行操作
1.mysql数据库 2.mongoDB数据库 3.redis数据库 1.创建项目 scrapy startproject myproject cd myproject 2.创建爬虫 scrapy g ...
- 【bzoj 3489】A simple rmq problem
题目 \(kdt\)就是数点神器 我们先扫两遍处理出每个数上一次出现的位置\(pre_i,nxt_i\),之后变成\((i,pre_i,nxt_i)\)这样一个三维空间上的点 就变成了求一个立方体的最 ...
- idea创建web项目,springboot项目,maven项目
web项目搭建 https://www.cnblogs.com/jxldjsn/p/8203859.html
- 创建 linuxrc 文件
创建 linuxrc,加入如下内容: [arm@localhost my_rootfs]#vi linuxrc #!/bin/sh #挂载/etc 为 ramfs, 并从/mnt/etc 下拷贝文件到 ...
- 满血复活前的记录(持续更新ing)
时隔一年重新开启算法竞赛征程. 该记录大多为老课件.已经做过的习题重做和已经看过的书本重看 7.21 下午到山大 娄晨耀basic_algorithm课件中的内容: 复习线性筛原理 复习差分 做完Co ...
- Android 开发 Camera1_如何使用对焦功能
前言 Camera1的自动对焦还是有一些坑值得开一个篇幅来讲解,一般对焦Mode有以下几种: Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO 连续自动对焦视 ...
- rem适配手机
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HTML+css 小组件
1.三角 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...