- 比较所有相邻元素,如果第一个比第二个大就交换他们
- 执行一次后可以保证最后一个数字是最大的
- 重复执行 n-1 次,就可以完成排序
// 时间复杂度 O(n ^ 2) n为数组长度
// 空间复杂度 O(1)
Array.prototype.bubbleSort = function () {
for (i = 0; i < this.length - 1; i++) {
for (let j = 0; j < this.length - 1 - i; j++) {
if (this[j] > this[j + 1]) {
// 交换数据
[this[j], this[j + 1]] = [this[j + 1], this[j]];
}
}
}
}
以下是一个JavaScript实现冒泡排序的案例:
function bubbleSort(arr) {
var len = arr.length;
for (var i = 0; i < len - 1; i++) {
// 提前退出冒泡循环的标志位
var flag = false;
for (var j = 0; j < len - 1 - i; j++) {
// 如果当前元素比下一个元素大,则交换它们的位置
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = true; // 表示有数据交换
}
}
// 如果在一轮遍历中没有发生过交换,则数组已经有序,提前退出
if (!flag) break;
}
return arr;
}
// 测试
var arr = [5, 3, 8, 4, 6];
console.log(bubbleSort(arr)); // 输出: [3, 4, 5, 6, 8]
在这个代码中,外层循环控制遍历的轮数,内层循环则负责每轮中的元素比较和交换。通过设置一个标志位flag来判断在一轮遍历中是否发生了交换,如果没有发生交换(即数组已经有序),那么就提前结束冒泡过程,从而优化了算法效率。
本文暂时没有评论,来添加一个吧(●'◡'●)