1、要解决的问题
给定如下所示的数字列表,请按升序对它们进行排序。
$numbers = [21,25,100,98,89,77];
要求
冒泡排序通过一次比较两个值来工作,并且成对配对。并且迭代直到所有元素都到位才结束。每次迭代后,至少有一个元素移到列表的末尾。下面是第一次迭代的说明:
描述冒泡排序的伪代码如下:
FOR each element of the list
FOR each element of the list
IF current element greater then next element
swap the elements//如果当前的元素大于后一个元素,则交换位置
END IF
END FOR
END FOR
内层循环被认为是一次迭代,外层循环确保我们迭代足够的时间来对列表充分进行排序。
要在PHP中实现冒泡排序,我们只需要两层循环。请注意,两层循环的终止是:列表的长度-1。这是为了防止访问未索引的元素。
<?php
$numbers = [21, 25, 100, 98, 89, 77];
$length = count($numbers) - 1
for ($i = 0; $i < $length; $i++) {
for ($j = 0; $j < $length; $j++) {
if ($numbers[$j] > $numbers[$j + 1]) {
$tmp = $numbers[$j];
$numbers[$j] = $numbers[$j + 1];
$numbers[$j + 1] = $tmp;
}
}
}
print_r($numbers);
// 输出:
/*
Array
(
[0] => 21
[1] => 25
[2] => 77
[3] => 89
[4] => 98
[5] => 100
)
*/