冒泡排序 (Bubble Sort),遍历数据并依次比较相邻的元素,按照升序或降序交换。每次遍历可以确定一个最大或最小的元素,则下次遍历不需要在比较这个元素。重复遍历直到确定所有元素位置。
优化要点:如果一次遍历中没有发生交换,则停止遍历。
bubble-sort/index.js
function sort(arr = []) {
const a = [...arr];
let swapped = false;
for (let i = 1; i < a.length; i += 1) {
for (let j = 0; j < a.length - i; j += 1) {
if (a[j] > a[j + 1]) {
[a[j], a[j + 1]] = [a[j + 1], a[j]];
swapped = true;
}
}
if (!swapped) return a;
}
return a;
}
名称 | En | 最优 | 平均 | 最坏 | 内存 | 稳定 |
---|---|---|---|---|---|---|
冒泡排序 | Bubble sort | n | n^2 | n^2 | 1 | Yes |
设 C 表示比较次数,M 表示移动次数,最好情况:
时间复杂度为
最坏情况:
时间复杂度为
平均时间复杂度为
O(1)
由于两个元素相等不会被交换顺序,所以,冒泡排序是稳定排序。