javascript如何用数组实现冒泡排序的算法,不用sort函数怎么实现?
在 JavaScript 中,冒泡排序是一种简单的排序算法,其核心思想是通过多次遍历待排序的数组,相邻元素之间进行比较并交换,直到整个数组有序。冒泡排序的基本实现不使用 JavaScript 内置的 sort
函数。
冒泡排序算法步骤
- 比较相邻元素:遍历数组,将相邻的两个元素进行比较。
- 交换元素:如果第一个元素大于第二个元素,则交换它们的位置。
- 重复过程:继续遍历剩下的元素,每次遍历结束后,最大的元素会被移动到数组的末尾。
- 优化:如果在某次遍历中没有进行任何交换,说明数组已经有序,可以提前结束排序过程。
实现代码
以下是一个 JavaScript 示例,演示如何用数组实现冒泡排序:
javascriptfunction bubbleSort(arr) {
let n = arr.length;
let swapped;
// 遍历数组
for (let i = 0; i < n - 1; i++) {
swapped = false;
// 在每次遍历中,比较相邻的元素
for (let j = 0; j < n - i - 1; j++) {
// 如果当前元素大于下一个元素,则交换
if (arr[j] > arr[j + 1]) {
// 交换元素
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
swapped = true;
}
}
// 如果没有进行交换,数组已经有序,提前结束排序
if (!swapped) break;
}
return arr;
}
// 示例
const array = [64, 34, 25, 12, 22, 11, 90];
console.log("Original array:", array);
const sortedArray = bubbleSort(array);
console.log("Sorted array:", sortedArray);
代码解析
初始化:
n
:数组的长度。swapped
:用于标记是否进行了元素交换。
外层循环:
- 遍历数组
n-1
次,因为每次遍历都会将最大的元素放到正确的位置。
- 遍历数组
内层循环:
- 遍历未排序部分的元素进行比较和交换。
- 如果
arr[j] > arr[j + 1]
,则交换两个元素的位置。
优化:
- 如果在某次遍历中没有进行交换,说明数组已经排序完成,使用
swapped
标记提前退出排序。
- 如果在某次遍历中没有进行交换,说明数组已经排序完成,使用
返回结果:
- 最终返回排序后的数组。
优化和复杂度
时间复杂度:
- 最坏情况和平均情况时间复杂度为 O(n²),其中 n 是数组的长度。
- 最佳情况(数组已经有序)时间复杂度为 O(n)(通过优化的冒泡排序实现)。
空间复杂度:
- 冒泡排序是就地排序算法,空间复杂度为 O(1),不需要额外的存储空间。
总结
冒泡排序是一种简单的排序算法,通过多次比较和交换相邻元素,将最大(或最小)元素逐步移动到数组的末尾。上述 JavaScript 实现展示了如何用数组实现冒泡排序,同时包括了优化措施以提高效率。