js冒泡排序函数手写代码,附详细注释和测试


下面是一个手写的 JavaScript 冒泡排序函数,附有详细的注释和测试用例。

javascript

/

冒泡排序函数

@param {Array} arr - 需要排序的数组

@return {Array} - 排序后的数组

/

function bubbleSort(arr) {

// 获取数组的长度

let n = arr.length;

// 外层循环,控制排序的趟数

for (let i = 0; i < n - 1; i++) {

// 内层循环,进行相邻元素的比较和交换

for (let j = 0; j < n - 1 - i; j++) {

// 比较相邻的两个元素

if (arr[j] > arr[j + 1]) {

// 如果左边的元素大于右边的元素,交换它们的位置

let temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

}

// 每趟排序后,最大的元素会被放到数组的末尾

console.log(`第 ${i + 1} 趟排序后的数组:`, arr);

}

// 返回排序后的数组

return arr;

}

// 测试用例

const testArray = [64, 34, 25, 12, 22, 11, 90];

console.log("原始数组:", testArray);

const sortedArray = bubbleSort(testArray);

console.log("排序后的数组:", sortedArray);

详细注释

1. 函数定义:

javascript

function bubbleSort(arr) {

定义一个名为 `bubbleSort` 的函数,接受一个数组 `arr` 作为参数。

2. 获取数组长度:

javascript

let n = arr.length;

获取数组的长度,并将其存储在变量 `n` 中。

3. 外层循环:

javascript

for (let i = 0; i < n - 1; i++) {

外层循环控制排序的趟数。总共需要排序 `n - 1` 趟,因为每趟排序会将最大的元素放到数组的末尾。

4. 内层循环:

javascript

for (let j = 0; j < n - 1 - i; j++) {

内层循环进行相邻元素的比较和交换。随着排序的进行,最大的元素会被逐渐移动到数组的末尾,因此每次内层循环的范围可以逐渐减小。

5. 比较和交换:

javascript

if (arr[j] > arr[j + 1]) {

let temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

比较相邻的两个元素 `arr[j]` 和 `arr[j + 1]`。如果左边的元素大于右边的元素,则交换它们的位置。

6. 打印每趟排序后的数组:

javascript

console.log(`第 ${i + 1} 趟排序后的数组:`, arr);

打印每趟排序后的数组,以便观察排序过程。

7. 返回排序后的数组:

javascript

return arr;

返回排序后的数组。

测试用例

javascript

const testArray = [64, 34, 25, 12, 22, 11, 90];

console.log("原始数组:", testArray);

const sortedArray = bubbleSort(testArray);

console.log("排序后的数组:", sortedArray);

输出

原始数组: [ 64, 34, 25, 12, 22, 11, 90 ]

第 1 趟排序后的数组: [ 34, 25, 12, 22, 11, 64, 90 ]

第 2 趟排序后的数组: [ 25, 12, 22, 11, 34, 64, 90 ]

第 3 趟排序后的数组: [ 12, 22, 11, 25, 34, 64, 90 ]

第 4 趟排序后的数组: [ 12, 11, 22, 25, 34, 64, 90 ]

第 5 趟排序后的数组: [ 11, 12, 22, 25, 34, 64, 90 ]

第 6 趟排序后的数组: [ 11, 12, 22, 25, 34, 64, 90 ]

排序后的数组: [ 11, 12, 22, 25, 34, 64, 90 ]

通过这个测试用例,我们可以看到原始数组 `[64, 34, 25, 12, 22, 11, 90]` 经过冒泡排序后变成了 `[11, 12, 22, 25, 34, 64, 90]`。每趟排序后的数组也被打印出来,以便观察排序过程。