算法和数据结构是一个编程工作人员的内功,技术牛不牛,一般都会看这两点。作为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. unlimited 控制

  2. zookeeper&acticemq&redis&tomcat安装

    zookeeper安装  配置hosts  下载 wget http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar. ...

  3. 前端性能优化:Add Expires headers

    前端性能优化:Add Expires headers Expires headers 是什么? Expires headers:直接翻译是过期头.Expires headers 告诉浏览器是否应该从服 ...

  4. Android failed to start daemon

    异常描述:在Eclipse中运行Android项目时Console中出现: The connection to adb is down, and a severe error has occured. ...

  5. 使用Highcharts生成折线图_at last

    //数据库数据的读取,读取数据后数据格式的转换,还有highchart数据源的配置,伤透了脑筋. anyway,最终开张了.哈哈! 数据库连接:conn_orcale.php <?php $db ...

  6. mssql2012的分页查询

    sql2102支持的分页查询 注意:以下都是先执行排序,再取行数据 select* from t_workers order by worker_id desc offset 3 rows   --先 ...

  7. 记录 第一次体验安装python第三方库的全过程

    目的:安装 Pillow库 现状是:python是3.4,easy_install没有安装:pip没有安装, 步骤: 1.安装Pillow库需要安装pip 2.安装pip需要安装easy_instal ...

  8. 【php增删改查实例】第六节 - 部门管理模块(开始)

    sql建表语句详见:https://www.jianshu.com/p/c88077ed9073 1.新建html模板 新建一个空白的txt文档,然后把后缀名改为.html 用任意一个编辑器打开,比如 ...

  9. Linux随笔---tar命令

    一.解压 语法:tar  [主选项+辅选项]  文件或者目录 使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用. 主选项:c:create:v:verbose: ...

  10. Gitlab+Jenkins学习目录

    Gitlab+Jenkins基础篇 Gitlab+Jenkins学习之路(一)之Git基础 Gitlab+Jenkins学习之路(二)之gitlab部署 Gitlab+Jenkins学习之路(三)之g ...