一、原理
- 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)