PHP排序算法系列:冒泡排序
来源:互联网 发布:mac和nars口红哪个便宜 编辑:程序博客网 时间:2024/05/21 07:13
冒泡排序
冒泡排序(英语:Bubble Sort,台湾另外一种译名为:泡沫排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
原理
假定有一组数据(乱序),现要将这些数据按从小到大进行排序。
1 从左到右依次比较相邻的两个数,将小的数放在左边,大的数放在右边,这样依次比较下来,最大的数在最右方。
2 因为最后一位一定是正确的,所以继续对除最后一位的数组重复上面的步骤,直到排序完成。
例子
假定有一数组$a=[1,5,6,3,8,4]
,现需要将它们按从小到大排序
经过步骤一,数组变为$a=[1,5,3,6,4,8]
,现在保证的数组的最后一位是正确的,接着将数组除了最后一位继续重复步骤一,直至排序完成。
PHP代码实现
function bubbleSort($myArray){ $length=count($myArray); for ($i=0; $i <$length-1 ; $i++) { for ($j=0; $j < $length-1-$i; $j++) { if ($myArray[$j]>$myArray[$j+1]) { $temp=$myArray[$j]; $myArray[$j]=$myArray[$j+1]; $myArray[$j+1]=$temp; } } } return $myArray;}
算法时间复杂度计算
所需关键字的比较次数C=n(n-1)/2=O(n2)
所以冒泡排序的时间复杂度为O(n2)
冒泡排序优化思想
对冒泡排序的优化主要是减少交换次数。如果一次扫描中元素没有发生交换,那么排序就可以结束了。为此可设置一标志量flag,默认为false,如果扫描中发生交换了则把flag置为true,下轮扫描前先检查这个变量,如果flag=false则排序结束。
更进一步,可以记录每次扫描中最后一次交换的位置,下次扫描的时候只要扫描到上次的最后交换位置就行了,因为后面的都是已经排好序的,无需再比较。
冒泡排序优化PHP代码实现
function bubbleSort($myArray){ $length=count($myArray); for ($i=0; $i <$length-1 ; $i++) { $flag=false; for ($j=0; $j < $length-1-$i; $j++) { if ($myArray[$j]>$myArray[$j+1]) { $temp=$myArray[$j]; $myArray[$j]=$myArray[$j+1]; $myArray[$j+1]=$temp; $flag=true; } } if(!$flag){ return $myArray; } } return $myArray;}
0 0
- PHP排序算法系列:冒泡排序
- php冒泡排序算法
- PHP冒泡排序算法
- php冒泡排序算法
- php冒泡排序算法
- 冒泡排序算法 php
- PHP算法-冒泡排序
- php 冒泡排序算法
- PHP冒泡排序算法
- [李景山php]算法系列|php 实现 冒泡排序!
- php排序算法(冒泡排序,快速排序)
- 【算法系列】—冒泡排序
- 排序算法系列:冒泡排序与双向冒泡排序
- 排序算法系列一(冒泡排序)
- 七大排序算法系列之冒泡排序
- 排序算法系列之冒泡排序
- 排序算法系列之冒泡排序
- 排序算法系列——冒泡排序
- 析构函数中调用析构函数的情况
- CodeForces 449D Jzzhu and Numbers
- aop注解配置、表达式
- 如何打造一个小而精的电商网站架构?
- 技术积累20170415(4)
- PHP排序算法系列:冒泡排序
- 连表查询
- PHP各种环境下的代码调试
- Android UI性能优化 检测应用中的UI卡顿
- 1028. 人口普查(20)
- Android Intent获取不到值
- Pyhton 单行、多行注释符号使用方法及规范
- easyUI TreeGrid
- okhttp的个人简易封装