冒泡奇遇:从混乱到有序的华丽转身!
2025-02-24开发笔记祥技术支持431°c
A+ A-冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小(或越大)的元素会经过交换慢慢“浮”到数列的顶端。
下面我将详细解释如何在PHP中实现冒泡排序算法。
PHP实现冒泡排序
首先,我们需要一个函数来执行冒泡排序。这个函数将接受一个数组作为输入,并返回排序后的数组。
function bubbleSort(&$array) {
$n = count($array);
// 外层循环控制比较的轮数
for ($i = 0; $i < $n - 1; $i++) {
// 标志位,用于判断本轮是否有发生交换
$swapped = false;
// 内层循环控制每一轮的比较和交换
for ($j = 0; $j < $n - 1 - $i; $j++) {
// 如果前面的元素大于后面的元素,则交换它们
if ($array[$j] > $array[$j + 1]) {
$temp = $array[$j];
$array[$j] = $array[$j + 1];
$array[$j + 1] = $temp;
// 设置标志位为true,表示发生了交换
$swapped = true;
}
}
// 如果没有发生交换,说明数组已经有序,提前退出
if (!$swapped) {
break;
}
}
}
// 示例使用
$unsortedArray = [64, 34, 25, 12, 22, 11, 90];
bubbleSort($unsortedArray);
print_r($unsortedArray);代码解释
函数定义
function bubbleSort(&$array)定义了一个名为bubbleSort的函数,该函数接受一个引用参数$array,这意味着函数内部对数组的任何修改都会反映到原数组上。获取数组长度
$n = count($array);获取数组的长度。外层循环
for ($i = 0; $i < $n - 1; $i++)控制比较的轮数。每一轮过后,最大的元素都会“冒泡”到数组的末尾,因此每完成一轮,需要比较的元素数量就减少一个。标志位
$swapped = false;用来判断当前轮次是否发生了元素交换。如果没有发生交换,说明数组已经有序,可以提前退出循环,提高效率。内层循环
for ($j = 0; $j < $n - 1 - $i; $j++)控制每一轮的比较和交换。$n - 1 - $i确保每轮比较到当前未排序部分的末尾。比较和交换
if ($array[$j] > $array[$j + 1])判断相邻两个元素的大小,如果前面的元素大于后面的元素,则交换它们的位置。提前退出
if (!$swapped) { break; }如果某一轮没有发生交换,说明数组已经有序,可以提前退出外层循环。示例使用
定义一个未排序的数组$unsortedArray,调用bubbleSort函数对其进行排序,然后使用print_r打印排序后的数组。
冒泡排序的时间复杂度
最坏情况
O(n^2),当输入数组是逆序时,需要进行n*(n-1)/2次比较和交换。最优情况
O(n),当输入数组已经有序时,只需进行一次遍历,没有发生交换,时间复杂度为O(n)。但由于我们通常需要处理的是无序数组,所以这种情况较少见。平均情况
O(n^2)。
冒泡排序是一种简单但效率较低的排序算法,适用于数据量较小或数据基本有序的情况。对于大数据集,建议使用更高效的排序算法,如快速排序、归并排序等。



