PHP排序算法之冒泡排序

雾凇泛型
• 阅读 1932

一、冒泡排序

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

  举例说明: $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 次。对此我们可以用双重循环语句,外层循环控制循环轮次,内层循环控制每轮的比较次数。

代码实现:
$arr=[11,3,56,62,21,66,32,78,36,76,39,88,34];
//该层循环控制 需要冒泡的轮数
for ($i=1; $i < count($arr); $i++) {

//该层循环用来控制每轮 冒出一个数 需要比较的次数
for ($j=0; $j < count($arr) - $i; $j++) { 
    if($arr[$j] > $arr[$j+1])
    {
        $tmp = $arr[$j];
        $arr[$j] = $arr[$j+1];
        $arr[$j+1] = $tmp;
    }
}

}
var_dump($arr);

参考 :https://www.cnblogs.com/wgq12...

点赞
收藏
评论区
推荐文章
22 22
3年前
【排序算法动画解】排序介绍及冒泡排序
本文为系列专题的第12篇文章。1.2.3.4.5.6.7.8.9.10.11.本文先简单介绍一下什么是排序,然后再结合动画介绍暴力排序和冒泡排序。1.什么是排序?排序在日常生活中无处不在。比如考试成绩的排名、体育课的从低到高的队形、网购时按价格升序排列或降序排列等等。|姓名|学号|班级|成绩|||||
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
22 22
3年前
【排序算法动画解】简单选择排序
本文为系列专题的第13篇文章。1.2.3.4.5.6.7.8.9.10.11.12.在文章【】中,我们介绍了暴力排序和冒泡排序这两种排序算法,算是一个引子。同时指出暴力排序和冒泡排序的缺点硬伤。本文介绍的简单选择排序则“医治”了上面提到的暴力排序和冒泡排序的“硬伤”。核心思想:从数组的第一个元素开始,将其作为基准元素,然后找出基准
Wesley13 Wesley13
3年前
java中几种排序的实现
1.最简单的冒泡排序/\\\冒泡排序\/publicstaticvoidbubbleSort(){int\\arr{5,8,1,2,9,8,7,4};System.out.println("排序前的数组为:");for(intnum:arr){System.o
Wesley13 Wesley13
3年前
Java面试总结(排序算法)
1.冒泡排序算法描述:两两比较,大的放后面2.选择排序算法描述:在m元数组中找到最小值的位置,然后将最小值的位置和第n(n0,1,2,....m1)位的值对调,排序k次则m元数组中前k(k<m)位的值已经排序好,m元数组中前k位的值不需要再进行排序,此时需要排序的元素只有mk个3.插入排序算
Wesley13 Wesley13
3年前
C++经典算法题
41.AlgorithmGossip:基数排序法说明在之前所介绍过的排序方法,都是属于「比较性」的排序法,也就是每次排序时,都是比较整个键值的大小以进行排序。这边所要介绍的「基数排序法」(radixsort)则是属于「分配式排序」(distributionsort),基数排序
Wesley13 Wesley13
3年前
C#冒泡排序(完整代码)
百度百科冒泡排序是笔试面试经常考的内容,虽然它是这些算法里排序速度最慢的原理:从头开始,每一个元素和它的下一个元素比较,如果它大,就将它与比较的元素交换,否则不动。这意味着,大的元素总是在向后慢慢移动直到遇到比它更大的元素。所以每一轮交换完成都能将最大值冒到最后。 原出处:https://www.cnblogs.com/wangjiaho
Stella981 Stella981
3年前
JavaScript常用基础算法
基础算法一、排序1.冒泡排序//冒泡排序functionbubbleSort(arr){for(vari1,lenarr.length;i<len1;i){for(varj0;j<
Stella981 Stella981
3年前
Lua 排序算法
冒泡排序(BubbleSort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。算法步骤1.有一个长度为n
菜园前端 菜园前端
2年前
什么是冒泡排序
原文链接:什么是冒泡排序(bubbleSort)?冒泡排序是所有排序算法中最简单的一种,当然也是性能最差的一种。冒泡排序的思想其实很简单,就如它的名字一样在水中"冒泡"。水中有很多散乱的小气泡,然后一个个气泡往水面上冒出。例如一组无序的数组,最左边就是水底
小万哥 小万哥
1年前
NumPy 数组排序、过滤与随机数生成详解
NumPy数组排序排序数组排序数组意味着将元素按特定顺序排列。顺序可以是数字大小、字母顺序、升序或降序等。NumPy的ndarray对象提供了一个名为sort()的函数,用于对数组进行排序。示例:pythonimportnumpyasnparrnp.arr