请用JS编写快速排序算法与冒泡排序算法,并加上注释
时间: 2023-07-18 14:34:24 浏览: 87
js代码-js冒泡排序
好的,下面是快速排序算法和冒泡排序算法的JS实现和注释:
快速排序算法:
```javascript
function quickSort(arr) {
// 如果数组长度小于等于1,则返回原数组
if (arr.length <= 1) {
return arr;
}
// 选择基准点,可以选第一个元素、最后一个元素或者中间元素
const pivotIndex = Math.floor(arr.length / 2);
const pivot = arr[pivotIndex];
// 分别存放比基准点小、大和等于基准点的元素
const less = [];
const greater = [];
const equal = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
less.push(arr[i]);
} else if (arr[i] > pivot) {
greater.push(arr[i]);
} else {
equal.push(arr[i]);
}
}
// 递归处理比基准点小和大的数组,再将三个数组拼接起来
return quickSort(less).concat(equal, quickSort(greater));
}
```
注释:
1. `quickSort` 函数接受一个数组作为参数,返回排序后的数组。
2. 如果数组长度小于等于1,则返回原数组,因为只有一个元素或者没有元素的数组已经是有序的了。
3. 选择基准点,这里选取的是中间元素。
4. 分别存放比基准点小、大和等于基准点的元素。
5. 递归处理比基准点小和大的数组,再将三个数组拼接起来。
冒泡排序算法:
```javascript
function bubbleSort(arr) {
// 外层循环控制排序的趟数
for (let i = 0; i < arr.length - 1; i++) {
// 内层循环控制每趟排序的次数
for (let j = 0; j < arr.length - 1 - i; j++) {
// 如果前一个元素比后一个元素大,则交换它们的位置
if (arr[j] > arr[j + 1]) {
const temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
```
注释:
1. `bubbleSort` 函数接受一个数组作为参数,返回排序后的数组。
2. 外层循环控制排序的趟数,由于每趟排序都会把最大的元素“冒泡”到最后,所以最后一个元素不需要再参与比较。
3. 内层循环控制每趟排序的次数,由于已经有 `i` 个元素排好序了,所以内层循环只需要比较前 `arr.length - 1 - i` 个元素。
4. 如果前一个元素比后一个元素大,则交换它们的位置。
阅读全文