算法和数据结构是一个编程工作人员的内功,技术牛不牛,一般都会看这两点。作为php程序员, 提升技能当然也得学习算法。

  下面介绍四种入门级排序算法: 冒泡排序、选择排序、插入排序、快速排序。

 

一、冒泡排序

  原理:对一组数据,比较相邻数据的大小,将值小数据在前面,值大的数据放在后面。   (以下都是升序排列,即从小到大排列)

  举例说明: $arr = array(6, 3, 8, 2, 9, 1);

   $arr 有6个数据,按照两两比较大小如下,注意  比较轮数 和 每轮比较次数

  第一轮排序:

    第一次比较  6和3比较 结果:3    6   8   2   9   1

    第二次比较  6和3比较 结果:3    6   8   2   9   1

    第三次比较  8和2比较 结果:3    6   2   8   9   1

    第四次比较  8和9比较 结果:3    6   2   8   9   1

    第五次比较  9和1比较 结果:3    6   2   8   1   9

  第一轮比较总结:1.排序第1轮、比较5次,没有获得从小到大的排序   2.因为每次比较都是大数往后靠,所以比较完成后,可以确定大数排在最后(9 已经冒泡冒出来了,下轮比较可以不用比较了 )

  第二轮排序:

    第一次比较  3和6比较 结果:3    6   2   8   1   9

    第二次比较  6和2比较 结果:3    2   6   8   1   9

    第三次比较  6和8比较 结果:3    2   6   8   1   9

    第四次比较  8和1比较 结果:3    2   6   1   8   9

  第二轮比较总结:1.排序第2轮、比较4次,没有获得从小到大的排序   2.冒泡出了 8,下轮不用比较8 了

  

  第三轮排序:

    第一次比较  3和2比较 结果:2    3   6   1   8   9

    第二次比较  3和6比较 结果:2    3   6   1   8   9

    第三次比较  6和1比较 结果:2    3   1   6   8   9

  第三轮比较总结:1.排序第3轮、比较3次,没有获得从小到大的排序   2.冒泡出了 6,下轮不用比较6 了

  第四轮排序:

    第一次比较  2和3比较 结果:2    3   1   6   8   9

    第二次比较  3和1比较 结果:2    1   3   6   8   9

  第四轮比较总结:1.排序第4轮、比较2次,没有获得从小到大的排序   2.冒泡出了 3,下轮不用比较3 了

  第五轮排序:

    第一次比较  2和1比较 结果:1   2   3   6   8   9

  第五轮比较总结:1.排序第5轮、比较1次,没有获得从小到大的排序   2.冒泡出了 2,由于还剩一个1,不用再比较了,至此通过5轮排序,完成整个排序。

  通过以上五轮排序,若干次比较,我们有理由推断出一个结论:

  对于一个长度为N的数组,我们需要排序 N-1 轮,每 i 轮 要比较 N-i 次。对此我们可以用双重循环语句,外层循环控制循环轮次,内层循环控制每轮的比较次数。

  

<?php 

  function order($arr){
  $count = count($arr);
  $temp = 0;
   //外层控制排序轮次
  for($i=0; $i<$count-1; $i++){
  //内层控制每轮比较次数
  for($j=0; $j< $count-1-$i; $j++){
  if($arr[$j] > $arr[$j+1]){
  $temp = $arr[$j];
  $arr[$j] = $arr[$j+1];
  $arr[$j+1] = $temp;
  }
   }
  }
   return $arr;
} $arr= array(6,3,8,2,9,1);
$res = order($arr);
var_dump($res);

php四排序-冒泡排序的更多相关文章

  1. Linux C++ 直接选择排序,冒泡排序,快速排序

    选择排序的思想是:每次从待排序中选择最小(大)的元素插入已经排好的序列中. /*直接选择排序*/ #include <iostream> using namespace std; void ...

  2. 算法:四种冒泡排序(Bubble Sort)实现

    背景 大学关于排序的算法,好像就学会了冒泡排序,这个算是排序界的 hello,world 了,冒泡排序的定义如下: 重复的遍历数组. /// <summary> /// 重复的遍历数组. ...

  3. python 排序冒泡排序与双向冒泡排序

    冒泡排序: 冒泡排序就是每次找出最大(最小)元素,放在集合最前或最后,这是最简单的排序算法 def bubble_sort(collection): #升序排列 length=len(collecti ...

  4. Java数据结构之排序---冒泡排序

    冒泡排序的基本思想: 通过对待排序序列从前到后(从下标小的元素开始),依次比较相邻位置的元素的值,若发现与给定的次序冲突,则交换位置(假设数值大的数放在序列的后面),使数值较大的元素逐渐从前移动到后部 ...

  5. JAVA排序--[冒泡排序]

    package com.array; public class Sort_MaoPao { /** * 项目名称:冒泡排序 * 项目要求:用JAVA对数组进行排序,并运用冒泡排序算法 * 作者:Sev ...

  6. [Java]数组排序-选择排序 冒泡排序 插入排序

    1 选择排序  原理:a 将数组中的每个元素,与第一个元素比较          如果这个元素小于第一个元素, 就将这个         两个元素交换.       b 每轮使用a的规则, 可以选择出 ...

  7. java-数组排序--冒泡排序、鸡尾酒排序、地精排序

    冒泡排序 冒泡排序的思想是,让依次数组中相邻的数进行比较,如果前一个数比后一个数大,则两数进行交换,大的数就会象泡泡一样慢慢浮在水面上了 见图解 稳定性:稳定时间复杂度:O(n2) public st ...

  8. 排序——冒泡排序(java描述)

    百度百科:冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小.首字母从A到Z)错误就把他们交 ...

  9. 数据结构:链表 >> 链表按结点中第j个数据属性排序(冒泡排序法)

    创建结点类,链表类,测试类 import java.lang.Object; //结点node=数据date+指针pointer public class Node { Object iprop; p ...

随机推荐

  1. ceph kubernetes中使用

    1.在管理节点上,进入刚创建的放置配置文件的目录,用 ceph-deploy 执行如下步骤 mkdir /opt/cluster-ceph cd /opt/cluster-ceph ceph-depl ...

  2. 理解C#的Lock语法意义

    一. 为什么要lock,lock了什么? 当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待.但当不同的线程都需要访问某个资源的时候,就需要同步机制了,也就是说当 ...

  3. 节点的启动与关闭 ros::init()解析(c++)

    1.初始化roscpp 节点 ros::init()  API链接:http://docs.ros.org/api/roscpp/html/init_8h.html 在node代码中在调用其它rosc ...

  4. ping和telnet

    ping命令 验证IP的可达性 本地ping虚拟机中的ip地址: telnet命令 验证服务的可用性,某个端口是否打开 连接到服务器的端口上: 几种场景: (1)ping通,telnet不行 ip地址 ...

  5. Jmeter上传下载文件

    每次使用时都会忘记,此处是存储网路上通用的方式.   1.上传文件 记得勾选“use multipart/form-data for post”,表明此请求包含文件信息.在信息请求头中,需加入“Con ...

  6. Oracle 表删除操作

    删除表内容(dml):delete from 删除表结构(ddl):drop table xx 清空表(ddl):truncate table 清空整张表,不能回滚,不会产生大量日志文件: 表空间会得 ...

  7. Hadoop详细配置教程

    windows下采用PuTTY或者Xshell连接远程主机 mac用终端连接远程linux主机:ssh user@hostname user 为 linux 服务器的管理员名称 hostname 为 ...

  8. activiti发布APP时报错:关联的流程无效

    解决办法: 1.检查流程命名和任务命名以及其他命名中是否有特殊字符,有一些字符是不支持的.(中文是可以的,中文标点符号可能不行,我的经验是顿号会报错) 2.检查流程图,把鼠标放到每一根连接线上,观察它 ...

  9. Swoole Timer 的应用

    目录 你好,Swoole Timer 应用场景 参考文档 你好,Swoole PHP 的协程高性能网络通信引擎,使用 C/C++ 语言编写,提供了多种通信协议的网络服务器和客户端模块. Swoole ...

  10. Java转python第一天

    1.python xx.py 2.字符串可以与数字相乘 str = "abc" msg = str*3 print(msg) # 结果:abcabcabc 3.换行用三个单引号 ' ...