排序算法是计算机科学中用于对元素序列进行排序的一系列算法
一下是js其中几种排序方法
1. 冒泡排序(Bubble Sort)
冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
function bubbleSort(arr) {
let len = arr.length;
for (let i = 0; i < len - 1; i++) {
for (let j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换相邻元素
let temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
// 示例
const arr = [64, 34, 25, 12, 22, 11, 90];
console.log("Sorted array:", bubbleSort(arr));
2. 快速排序(Quick Sort)
快速排序是一种分治法策略的排序算法,它通过一个轴值(pivot)将数组分成两个子数组,左边的数组元素都比轴值小,右边的数组元素都比轴值大,然后递归地对这两个子数组进行快速排序。
function quickSort(arr) {
if (arr.length < 2) {
return arr;
}
const pivot = arr[0];
const left = [];
const right = [];
for (let i = 1; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return [...quickSort(left), pivot, ...quickSort(right)];
}
// 示例
const arr = [7, 2, 1, 6, 8, 5, 3, 4];
console.log("Sorted array:", quickSort(arr));
3.插入排序(Insertion Sort)
插入排序的工作方式像我们整理扑克牌一样。首先,我们认为第一张牌是已经排序好的,然后我们逐渐从剩余的牌中取出每一张,将它插入到已排序序列中的适当位置。
function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
let current = arr[i];
let j = i - 1;
// 将当前元素与已排序的元素比较并插入到正确的位置
while (j >= 0 && arr[j] > current) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = current;
}
return arr;
}
// 示例
const arr = [5, 2, 9, 1, 5, 6];
console.log("Sorted array:", insertionSort(arr));
4. 归并排序(Merge Sort)
归并排序是使用分治法的一个非常典型的应用。它将数组分成两半,对每一半进行排序,然后将排序好的两半合并在一起。
function mergeSort(arr) {
if (arr.length <= 1) {
return arr;
}
const middle = Math.floor(arr.length / 2);
const left = arr.slice(0, middle);
const right = arr.slice(middle);
return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right) {
let result = [];
let leftIndex = 0;
let rightIndex = 0;
while (leftIndex < left.length && rightIndex < right.length) {
if (left[leftIndex] < right[rightIndex]) {
result.push(left[leftIndex]);
leftIndex++;
} else {
result.push(right[rightIndex]);
rightIndex++;
}
}
return result.concat(left.slice(leftIndex)).concat(right.slice(rightIndex));
}
// 示例
const arr = [4, 38, 34, 12, 8, 7, 3, 1];
console.log("Sorted array:", mergeSort(arr));