在 JavaScript 中实现数据排序和查找主要有以下算法:
- 冒泡排序:两两比较元素,大的放后面。时间复杂度O(n2)。
function bubbleSort(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
- 选择排序:找到最小的元素放在前面。时间复杂度O(n2)。
function selectionSort(arr) {
for (let i = 0; i < arr.length; i++) {
let minIndex = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
}
return arr;
}
- 插入排序:将元素插入到已排序好的数组中。时间复杂度O(n2)。
function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
let temp = arr[i];
let j = i - 1;
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
return arr;
}
- 希尔排序:插入排序的改进版,插入排序的一种更高效的实现。时间复杂度O(nlogn)。
function shellSort(arr) {
let gap = Math.floor(arr.length / 2);
while (gap > 0) {
for (let i = gap; i < arr.length; i++) {
let j = i;
let temp = arr[i];
while (j - gap >= 0 && arr[j - gap] > temp) {
arr[j] = arr[j - gap];
j = j - gap;
}
arr[j] = temp;
}
gap = Math.floor(gap / 2);
}
return arr;
}
- 二分查找:要求数组有序。时间复杂度O(logn)。
function binarySearch(arr, target) {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
if (arr[mid] === target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
所以,总结来说数据排序和查找的主要算法有:
- 冒泡排序:两两比较,时间复杂度O(n2)
- 选择排序:找到最小的放前面,时间复杂度O(n2)
- 插入排序:插入到已排序的数组,时间复杂度O(n2)
- 希尔排序:插入排序的改进,时间复杂度O(nlogn)
- 二分查找:要求数组有序,时间复杂度O(logn)