PHP排序算法系列:冒泡排序

本文介绍了冒泡排序的基本原理及其实现方法,并通过PHP代码详细解释了如何实现冒泡排序,同时探讨了冒泡排序的时间复杂度及其优化思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序

冒泡排序(英语: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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值