简单讲解一下冒泡排序的原理 及代码

来源:互联网 发布:学软件开发学校 编辑:程序博客网 时间:2024/05/18 03:16

           说到冒泡  排序,其实原理很简单,

   比如将

 $arr = [1, 22, 11, 33, 42, 45];
  数组内的元素按升序排序

   算法原理:将前后每两个数进行比较,较大的数往后排,一轮下来最大的数就排到最后去了。然后再进行第二轮比较,第二大的数也排到倒数第二了,以此类推:

  第一轮比较:

  第一次比较:1,12,11,33,48,45第一个数不大于第二个数,不调换位置

  第二次比较:1,12,11,33,48,45第二个数大于第三个数,调换位置

  第三次比较:1,11,12,33,48,45个数不大于第个数,不调换位置

  第次比较:1,11,12,33,48,45个数大于第个数,调换位置

  。。。。。以此类推

  第六次比较:1,22, 11, 33,45, 48第五个数大于第六个数,调换位置

  上面就进行完了第一轮比较将最大的一个数字排到了最后面。比较次数5次

  第二轮比较:

  跟第一轮比较一样,但我们可以发现,最后一个数字我们不需要比较,因为那是最大的数

  比较次数4次

  第三轮比较:

  比较次数3次

  。

  。

  。

  。

第6轮比较:

  比较次数1次

  从上面的分析我们可以看出我们排6个数需要比较5轮,每一轮比较由5次递减到1次

  代码:


$arr = [1, 22, 11, 33, 48, 45];$k = 0;//循环多少次$count = count($arr);//计算数组长度for ($i = 1; $i < $count; $i++) {//循环的次数    for ($j = 0; $j < $count - $i; $j++) {//循环的东西        $k++;//循环多少次        if ($arr[$j] > $arr[$j + 1]) {            list($arr[$j], $arr[$j + 1]) = [$arr[$j + 1], $arr[$j]];        }        echo $k;        echo "<br>";    }}print_r($arr);


原创粉丝点击