冒泡排序
一、原理
☆思想:通过比较,把较大或较小的数象水里的气泡一样浮上来,得到最大或最小值;
☆过程:以递增为例,用数组表示,长度为n,从首元素开始循环,每个元素和下一个元素相比,如果大于则交换位置,直到第n-2个元素,最后一个元素就是最大值;
再从首元素开始循环,直到第n-3个元素,第n-2个元素就是最大值;反复循环,每次获得剩余元素中的最大值,最终数组为升序;
二、实现代码
JavaScript 代码实现
function bubbleSort(arr) { var done,temp; for (var i = 1; i < arr.length; i++) { done = true; for (var j = 0; j < arr.length - i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; done = false; } } if (done) { break; } console.log(arr); } }
三、优化
设置一个标志done,每次循环初始化为true,如果元素有交换更新为false,本次循环结束判断,如果仍为true说明剩余元素有序,退出所有循环;
四、复杂度
| 名称 | 时间复杂度 | 空间复杂度 | 稳定性 | ||
| 平均 | 最坏 | 最优 | |||
| 冒泡排序 | O(n²) | O(n²) | O(n) | O(1) | √ |
最坏情况,数组反序,最后一个元素,需要进行n-1次比较和交换,…第二个元素,需要进行1次比较和交换,共需要1+2+3+……+(n-1)=n(n-1)/2次比较和交换;
最优情况,数组正序,最后一个元素,需要进行n-1次比较,没有交换就结束排序,共需要n-1次比较;
本排序需要申请一个额外空间;
相同元素不会交换,本排序稳定。

浙公网安备 33010602011771号