如何在Javascript中实现数据的排序和查找?有哪些算法?

在 JavaScript 中实现数据排序和查找主要有以下算法:

  1. 冒泡排序:两两比较元素,大的放后面。时间复杂度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;
}
  1. 选择排序:找到最小的元素放在前面。时间复杂度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;
}
  1. 插入排序:将元素插入到已排序好的数组中。时间复杂度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;  
}
  1. 希尔排序:插入排序的改进版,插入排序的一种更高效的实现。时间复杂度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;
}
  1. 二分查找:要求数组有序。时间复杂度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;
}

所以,总结来说数据排序和查找的主要算法有:

  1. 冒泡排序:两两比较,时间复杂度O(n2)
  2. 选择排序:找到最小的放前面,时间复杂度O(n2)
  3. 插入排序:插入到已排序的数组,时间复杂度O(n2)
  4. 希尔排序:插入排序的改进,时间复杂度O(nlogn)
  5. 二分查找:要求数组有序,时间复杂度O(logn)