说到冒泡 排序,其实原理很简单,
比如将
$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);