2026-03-24 07:18:46
以下是几种常见排序算法的JavaScript实现,包括冒泡排序、选择排序、插入排序、希尔排序、归并排序和快速排序:
1. 冒泡排序(Bubble Sort)冒泡排序通过重复遍历数组,比较相邻元素并交换顺序错误的元素,直到数组有序。
function bubbleSort(data) { var temp = 0; for (var i = data.length; i > 0; i--) { for (var j = 0; j < i - 1; j++) { if (data[j] > data[j + 1]) { temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; } } } return data;}2. 选择排序(Selection Sort)选择排序每次遍历数组时选择最小(或最大)的元素,放到已排序序列的末尾。
function selectionSort(data) { for (var i = 0; i < data.length; i++) { var min = data[i]; var temp; var index = i; for (var j = i + 1; j < data.length; j++) { if (data[j] < min) { temp = data[j]; data[j] = min; min = temp; index = j; } } temp = data[i]; data[i] = min; data[index] = temp; } return data;}3. 插入排序(Insertion Sort)插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
function insertSort(data) { var len = data.length; for (var i = 0; i < len; i++) { var key = data[i]; var j = i - 1; while (j >= 0 && data[j] > key) { data[j + 1] = data[j]; j--; } data[j + 1] = key; } return data;}4. 希尔排序(Shell Sort)希尔排序是插入排序的改进版,通过将数组分成多个子序列进行插入排序,逐步缩小子序列间隔,最终完成排序。
function shellSort(array) { var increment = array.length; var i; var temp; do { increment = Math.floor(increment / 3) + 1; for (i = increment; i < array.length; i++) { if (array[i] < array[i - increment]) { temp = array[i]; for (var j = i - increment; j >= 0 && temp < array[j]; j -= increment) { array[j + increment] = array[j]; } array[j + increment] = temp; } } } while (increment > 1); return array;}5. 归并排序(Merge Sort)归并排序采用分治法,将数组分成两半,分别排序后再合并成一个有序数组。
function mergeSort(array) { var len = array.length; if (len < 2) { return array; } var middle = Math.floor(len / 2); var left = array.slice(0, middle); var right = array.slice(middle); return merge(mergeSort(left), mergeSort(right));}function merge(left, right) { var result = []; while (left.length && right.length) { if (left[0] <= right[0]) { result.push(left.shift()); } else { result.push(right.shift()); } } while (left.length) result.push(left.shift()); while (right.length) result.push(right.shift()); return result;}6. 快速排序(Quick Sort)快速排序通过选择一个基准元素,将数组分成两部分,一部分小于基准,一部分大于基准,然后递归排序。
function quickSort(arr) { if (arr.length == 0) return []; var left = []; var right = []; var pivot = arr[0]; for (var i = 1; i < arr.length; i++) { if (arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat(pivot, quickSort(right));}总结这些排序算法各有优缺点,适用于不同的场景。