JavaScript 中常见的排序算法有以下几种:
冒泡排序是一种简单的排序算法,它会多次遍历要排序的数列,每次遍历都会比较相邻的两个元素,如果它们的顺序错误就交换它们。
代码如下:
function bubbleSort(arr) {
var len = arr.length;
for (var i = 0; i < len - 1; i++) {
for (var j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j+1]) {
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
插入排序是一种简单直观的排序算法,它的工作原理是将未排序的元素逐个插入已排序的序列中。具体实现时,从第一个元素开始,该元素可以认为已经被排序,取出下一个元素,在已经排序的元素序列中从后向前扫描,找到合适位置并插入。
代码如下:
function insertSort(arr) {
var len = arr.length;
for (var i = 1; i < len; i++) {
var key = arr[i];
var j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j+1] = arr[j];
j--;
}
arr[j+1] = key;
}
return arr;
}
快速排序是一种常用的排序算法,基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后对这两部分继续进行排序,以达到整个序列有序的目的。
代码如下:
function quickSort(arr, left, right) {
if (left < right) {
var pivotIndex = partition(arr, left, right);
quickSort(arr, left, pivotIndex-1);
quickSort(arr, pivotIndex+1, right);
}
return arr;
}
function partition(arr, left, right) {
var pivot = arr[left];
var i = left + 1;
var j = right;
while (i <= j) {
while (arr[i] < pivot && i <= j) {
i++;
}
while (arr[j] > pivot && i <= j) {
j--;
}
if (i < j) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
var temp = arr[left];
arr[left] = arr[j];
arr[j] = temp;
return j;
}
归并排序是一种采用分治思想的排序算法,它的核心思想是将大问题分解为小问题来解决,并将小问题的结果合并起来得到大问题的结果。在归并排序中,将待排序数组不断拆分为左右两个子数组,直到子数组长度为1,然后再将左右两个有序子数组合并成一个有序数组。
代码如下:
function mergeSort(arr) {
if (arr.length < 2) {
return arr;
}
var middle = Math.floor(arr.length / 2);
var leftArr = arr.slice(0, middle);
var rightArr = arr.slice(middle);
return merge(mergeSort(leftArr), mergeSort(rightArr));
}
function merge(leftArr, rightArr) {
var result = [];
while (leftArr.length && rightArr.length) {
if (leftArr[0] < rightArr[0]) {
result.push(leftArr.shift());
} else {
result.push(rightArr.shift());
}
}
return result.concat(leftArr).concat(rightArr);
}
以上是 JavaScript 中常见的四种排序算法。
1 天前