zoukankan      html  css  js  c++  java
  • 搜索算法

    顺序(或线性)搜索

    1
    2
    3
    4
    5
    6
    let sequentialSearch = function (item, array) {
    for (let i = 0; i < array.length; i++) {
    if (item === array[i]) { return i }
    }
    return -1
    }

    二分搜索

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    let binarySearch = function (item, array) {
    quickSort(array)

    let left = 0,
    right = array.length - 1, // 这里要减 1
    mid
    while (left <= right) {
    mid = Math.floor((left + right) / 2)
    if (item < array[mid]) { right = mid - 1 }
    else if (item > array[mid]) { left = mid + 1 }
    else { return mid }
    }
    return -1
    }

    工具函数

    大专栏  搜索算法>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    // 生成数组
    let generateNonSortedArray = (max, length) => {
    let temp = []
    for (let i = 0; i < length; i++) {
    temp.push(Math.ceil(Math.random() * max))
    }
    return temp
    }

    // 快速排序
    let quickSort = (array) => {
    quick(0, array.length - 1, array)
    }

    let quick = (left, right, array) => {
    let index
    if (array.length > 1) {
    index = partition(left, right, array)
    // 以主元为界,分两组
    // 要有停止递归继续执行的判断条件
    if (left < index - 1) { quick(left, index - 1, array) }
    if (right > index) { quick(index, right, array) }
    }
    }

    let partition = (left, right, array) => {
    // 以正中间的元素为主元
    let pivot = array[Math.floor((left + right) / 2)],
    l = left, // 左指针,从前往后遍历左边
    r = right // 右指针,从后往前遍历右边

    // 找到前面比主元大的元素和后面比主元小的元素,两者交换
    while (l <= r) {
    while (array[l] < pivot) { l += 1 }
    while (array[r] > pivot) { r -= 1 }
    if (l <= r) {
    swap(l, r, array)
    l += 1
    r -= 1
    }
    }
    // 左指针大于右指针时,返回左指针,作为下一次遍历的主元
    return l
    }
    // 快速排序结束

    // 交换两个值
    let swap = (i, j, array) => {
    [array[i], array[j]] = [array[j], array[i]]
    }

    参考链接

  • 相关阅读:
    MySQL 性能调优之索引
    MySQL 性能调优之存储引擎
    MySQL数据类型优化—整数类型优化选择
    MySQL数据性能优化-修改方法与步骤
    MySQL设计SQL语句优化规范
    MySQL索引的设计、使用和优化
    MySQL的SQL语句优化-group by语句的优化
    SQL性能优化-order by语句的优化
    MySQL查询优化注意下面的四个细节
    优化MySQL性能的几种方法-总结
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12366626.html
Copyright © 2011-2022 走看看