JavaScript 中有多种内置和自定义的排序方法。内置的 .sort()
方法是最直接的排序方式,而自定义排序算法如冒泡排序、选择排序、插入排序、希尔排序、快速排序等则提供了更深层次的学习和应用价值。下面我将详细介绍这些排序方法,并给出相应的示例代码。
1. 内置 .sort()
方法
JavaScript 数组的 .sort()
方法可以对数组元素进行排序。默认情况下,它按照字符串的Unicode码点顺序排序。对于数字排序,通常需要提供一个比较函数。
示例代码:
let numbers = [5, 3, 8, 1, 2];
numbers.sort((a, b) => a - b); // 升序
console.log(numbers); // 输出:[1, 2, 3, 5, 8]
2. 冒泡排序
冒泡排序通过重复遍历数组,比较相邻元素并交换它们(如果顺序错误),直到没有更多的交换为止。
示例代码:
function bubbleSort(arr) {
let len = arr.length;
for (let i = 0; i < len; i++) {
for (let j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
let numbers = [5, 3, 8, 1, 2];
bubbleSort(numbers);
console.log(numbers); // 输出:[1, 2, 3, 5, 8]
3. 选择排序
选择排序每次从待排序的部分找出最小(或最大)的元素,存放到序列的起始位置。
示例代码:
function selectionSort(arr) {
let len = arr.length;
for (let i = 0; i < len - 1; i++) {
let minIndex = i;
for (let j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (minIndex !== i) {
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
}
}
return arr;
}
let numbers = [5, 3, 8, 1, 2];
selectionSort(numbers);
console.log(numbers); // 输出:[1, 2, 3, 5, 8]
4. 插入排序
插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
示例代码:
function insertionSort(arr) {
let len = arr.length;
for (let i = 1; i < len; 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;
}
let numbers = [5, 3, 8, 1, 2];
insertionSort(numbers);
console.log(numbers); // 输出:[1, 2, 3, 5, 8]
5. 希尔排序
希尔排序是插入排序的一种更高效的改进版本,通过将整个数据分割成若干个子序列分别进行插入排序来提升性能。
示例代码:
function shellSort(arr) {
let n = arr.length;
let gap = Math.floor(n / 2);
while (gap > 0) {
for (let i = gap; i < n; i++) {
let temp = arr[i];
let j = i;
while (j >= gap && arr[j - gap] > temp) {
arr[j] = arr[j - gap];
j -= gap;
}
arr[j] = temp;
}
gap = Math.floor(gap / 2);
}
return arr;
}
let numbers = [5, 3, 8, 1, 2];
shellSort(numbers);
console.log(numbers); // 输出:[1, 2, 3, 5, 8]
以上是 JavaScript 中一些基本排序方法的讲解和示例代码。每种排序算法都有其特点和适用场景,理解它们的工作原理有助于在实际项目中做出更合适的选择。