📅  最后修改于: 2023-12-03 15:32:23.317000             🧑  作者: Mango
在JavaScript中,有许多不同的排序算法,每种算法都有不同的用途。本文将介绍以下几种算法:
冒泡排序是一种简单的排序算法。它重复地遍历要排序的列表,比较每对相邻的项,并在需要时交换它们的位置。如果在一次遍历中没有交换任何两个项的位置,则该列表已经排序完成。
/**
* 冒泡排序
* @param {Array} arr 需要排序的数组
* @return {Array} 排序后的数组
*/
function bubbleSort(arr) {
const len = arr.length;
for (let i = 0; i < len; i++) {
for (let j = 0; j < len - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
选择排序也是一种简单的排序算法。它首先在未排序的数组中找到最小的元素,然后将其放在已排序的数组的末尾。接下来,它再从未排序的数组中查找最小的元素,并将其放在已排序的数组的末尾。重复此过程,直到排序完成。
/**
* 选择排序
* @param {Array} arr 需要排序的数组
* @return {Array} 排序后的数组
*/
function selectSort(arr) {
const len = arr.length;
let minIndex;
for (let i = 0; i < len - 1; i++) {
minIndex = i;
for (let j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
}
return arr;
}
插入排序是一种简单的排序算法,它构建最终排序的数组,每次通过将未排序的元素插入已排序的数组来完成。
/**
* 插入排序
* @param {Array} arr 需要排序的数组
* @return {Array} 排序后的数组
*/
function insertSort(arr) {
const len = arr.length;
let preIndex, current;
for (let i = 1; i < len; i++) {
preIndex = i - 1;
current = arr[i];
while (preIndex >= 0 && arr[preIndex] > current) {
arr[preIndex + 1] = arr[preIndex];
preIndex--;
}
arr[preIndex + 1] = current;
}
return arr;
}
快速排序是一种分治算法。它将一个数组分成两个子数组,然后递归地排序子数组。
/**
* 快速排序
* @param {Array} arr 需要排序的数组
* @return {Array} 排序后的数组
*/
function quickSort(arr) {
if (arr.length <= 1) return arr;
const pivot = arr[Math.floor(arr.length / 2)];
const left = [];
const right = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else if (arr[i] > pivot) {
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
}
以上就是JS排序的四种算法,每种算法各有其优缺点,适用于不同的场景。在实际开发中,根据数据量和需要排序的情况,选择合适的算法具有很大的作用。