一、原理
- 1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 3、针对所有的元素重复以上的步骤,除了最后一个。
- 4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
二、实现
1. PHP
function bubbleSort($data)
{
if (!is_array($data)) { // 判断是否是数组, 执行1次
return [];
}
$n = count($data);
if ($n <= 0) { // 如果长度小于0则返回空数组,执行1次
return [];
}
for($i = 0; $i < $n - 1; $i++) { // 比较轮数,执行n次
for($j = 0; $j < $n - $i - 1; $j++) { // 比较次数, (n-1)+(n-2)+...+1次
if ($data[$j] > $data[$j + 1]) { // 如果前一个数大于后一个数则交换位置
$temp = $data[$j];
$data[$j] = $data[$j + 1];
$data[$j + 1] = $temp;
}
}
}
return $data;
}
2. javascript
function bubbleSort(arr)
{
let i = arr.length, j;
while (i > 0) {
for (j = 0; j < i - 1; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
i--;
}
return arr;
}
三、时间复杂度
时间复杂度计算为: 1 + 1 + ( n * ( n - 1 )) / 2
最终时间复杂度为:O(n^2)