当前位置: 首页 > 后端技术 > PHP

PHP排序算法之冒泡排序

时间:2023-03-30 06:10:57 PHP

1、冒泡排序原理  :对于一组数据,比较相邻数据的大小,值小的数据放在前面,值大的数据放在后面。(以下按升序排列,即从小到大排列)  例如:$arr=array(6,3,8,2,9,1);  $arr有6条数据,按照pairwise比较大小如下,注意比较轮次和每轮比较次数  第一轮排序:    第一轮比较6和3的比较结果:368291    6和3的第二次比较比较结果:368291    8和2的第三次比较比较结果:362891    8和9的第四次比较比较结果:362891    9和1的第五次比较结果:362819  第一轮比较总结:1.第一轮排序比较5次,没有得到从小到大的排序。2.因为每次比较都是大数在后,所以比较完成后可以确定大数排在最后(9已经冒泡了,所以可以省略下一轮比较)  第二轮排序:    first第一次比较3和6的结果:362819    第二次比较6和2的结果:326819    第三次比较6和8的结果:326819    第四次比较8和1的结果:326189  第二轮比较总结:1、第二轮排序和4比较,没有得到从小到大的排序2.8冒泡了,下一轮就不用再比较8了。    第三轮排序:    第一次比较3和2比较结果:236189    第二次比较3和6结果:236189    第三轮6和1比较比较结果:231689  第三轮比较总结:1.第三轮排序和3比较,没有到大排序2.6生成冒泡后,下一轮就不用再比6了。  第四轮排序:    2和3第一次比较的结果:231689    3和1第二次比较的结果:213689  第四轮比较总结:1.排序第4轮,比较2次,没有得到从小到大的排序2。冒出3,下一轮不用再比较3。689  第五轮比对总结:1.在第5轮排序中,比对了一次,没有得到从小到大的排序。通过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$arr[$j+1]){$tmp=$arr[$j];$arr[$j]=$arr[$j+1];$arr[$j+1]=$tmp;}}}var_dump($arr);参考:https://www.cnblogs.com/wgq12...