当前位置: 首页 » 技术学习 » PHP冒泡排序

PHP冒泡排序

时间:   浏览: 413次

PHP大法好~

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

举例说明: $arr = array(17,02,41,59,29,8,23);

$arr 有7个数据,按照两两比较大小如下,注意比较轮数每轮比较次数

第一轮排序:

第一次比较 02和17比较:02 17 41 59 29 8 23

第二次比较 17和41比较:02 17 41 59 29 8 23

第三次比较 41和59比较:02 17 41 59 29 8 23

第四次比较 59和29比较:02 17 41 29 59 8 23

第五次比较 59和 8比较:02 17 41 29 8 59 23

第六次比较 59和23比较:02 17 41 29 8 23 59

第一轮比较总结:1.排序第1轮、比较6次,没有获得从小到大的排序 2.因为每次比较都是大数往后靠,所以比较完成后,可以确定大数排在最后(59 已经冒泡冒出来了,下轮比较可以不用比较了 )

第二轮排序:

第一次比较 02和17比较:02 17 41 29 8 23 59

第二次比较 17和41比较:02 17 41 29 8 23 59

第三次比较 41和29比较:02 17 29 41 8 23 59

第四次比较 41和 8比较:02 17 29 8 41 23 59

第五次比较 41和23比较:02 17 29 8 23 41 59

第二轮比较总结:1.排序第2轮、比较5次,没有获得从小到大的排序 2.冒泡出了41,下轮不用比较41了

第三轮排序:

第一次比较 02和17比较:02 17 29 8 23 41 59

第二次比较 17和29比较:02 17 29 8 23 41 59

第三次比较 29和 8比较:02 17 8 29 23 41 59

第四次比较 29和23比较:02 17 8 23 29 41 59

第三轮比较总结:1.排序第3轮、比较4次,没有获得从小到大的排序 2.冒泡出了29,下轮不用比较29了

第四轮排序:

第一次比较 02和17比较:02 17 8 23 29 41 59

第二次比较 17和 8比较:02 8 17 23 29 41 59

第三次比较 17和23比较:02 8 17 23 29 41 59

第四轮比较总结:1.排序第4轮、比较3次,已获得从小到大的排序 2.冒泡出了23,下轮不用比较23了

第五轮排序:

第一次比较 02和8比较:02 8 17 23 29 41 59

第二次比较 8和17比较:02 8 17 23 29 41 59

第五轮比较总结:1.排序第5轮、比较2次,已获得从小到大的排序 2.冒泡出了17,下轮不用比较17了

第六轮排序:

第一次比较 02和8比较:02 8 17 23 29 41 59

第五轮比较总结:1.排序第5轮、比较2次,已获得从小到大的排序 2.冒泡出了8,由于还剩一个02,不用再比较了,至此通过6轮排序,完成整个排序。

对于一个长度为N的数组,我们需要排序 N-1 轮,每 i 轮 要比较 N-i 次。对此我们可以用双重循环语句,外层循环控制循环轮次,内层循环控制每轮的比较次数。

代码如下:

<?php
    function bubbleSort($arr){
        $temp=0;  //这是一个中间变量
        $len=count($arr);  //计算数组长度
        //我们要把数组从小到大进行排序
        for($i=0;$i<$len-1;$i++){
            for($j=0;$j<$len-1-$i;$j++){
                //如果前面的数比后面的大,就进行交换
                if($arr[$j]>$arr[$j+1]){
                    $temp=$arr[$j];
                    $arr[$j]=$arr[$j+1];
                    $arr[$j+1]=$temp;
                }
            }
        }    
        return $arr;
    }
    $arr01=array(17,02,41,59,29,8,23);
    echo "<pre>";
    print_r(bubbleSort($arr01));
    echo "</pre>";
?>

运行截图:

狗哥运行的代码截图

代码由狗哥原创整理编辑,如有错误,留言处提出~