当前位置: 首页 > news >正文

前端基础常见的算法

你整理的这些前端常见算法知识点挺实用的,适合复习或面试准备。下面我帮你稍微整理美化一下格式,并补充一点细节,让内容更清晰易读:


1. 排序算法

  • 冒泡排序(Bubble Sort)
    原理:通过重复比较相邻元素并交换位置,将最大(或最小)的元素逐步“冒泡”到数组的末尾。
    时间复杂度:平均和最坏为 O(n²),最好情况(已经有序)为 O(n)。

    function bubbleSort(arr) {for (let i = 0; i < arr.length - 1; i++) {for (let j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];}}}return arr;
    }
    
  • 快速排序(Quick Sort)
    原理:选择一个基准元素(pivot),将数组分成小于和大于基准的两部分,递归排序。
    时间复杂度:平均 O(n log n),最坏 O(n²)。

    function quickSort(arr) {if (arr.length <= 1) return arr;const pivot = arr[0];const left = arr.slice(1).filter(item => item < pivot);const right = arr.slice(1).filter(item => item >= pivot);return [...quickSort(left), pivot, ...quickSort(right)];
    }
    

2. 搜索算法

  • 线性搜索(Linear Search)
    原理:从头开始逐个比较,直到找到目标或遍历结束。
    时间复杂度:O(n)

    function linearSearch(arr, target) {for (let i = 0; i < arr.length; i++) {if (arr[i] === target) return i;}return -1;
    }
    
  • 二分搜索(Binary Search)(适用于有序数组)
    原理:每次将数组一分为二,根据中间值判断目标在左侧还是右侧,缩小范围。
    时间复杂度:O(log n)

    function binarySearch(arr, target) {let left = 0, right = arr.length - 1;while (left <= right) {const 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;
    }
    

3. 字符串算法

  • 字符串匹配(BF、KMP)

    • BF(Brute Force,暴力匹配):从主串每一个位置开始匹配模式串。时间复杂度 O(mn)。

    • KMP(Knuth-Morris-Pratt)算法:通过前缀表避免重复比较,提高效率。时间复杂度 O(n + m)。

    这里以暴力匹配为例:

    function bruteForceMatch(str, pattern) {for (let i = 0; i <= str.length - pattern.length; i++) {let j = 0;while (j < pattern.length && str[i + j] === pattern[j]) {j++;}if (j === pattern.length) return i;}return -1;
    }
    
  • 字符串反转
    原理:可以使用循环或内置方法来反转字符串。

    • 方法1:循环方式

      function reverseString(str) {let reversed = '';for (let i = str.length - 1; i >= 0; i--) {reversed += str[i];}return reversed;
      }
      
    • 方法2:内置方法

      const reverseString = str => str.split('').reverse().join('');
      

相关文章:

  • 如何实现一个“纯净”的空对象(无原型链属性)?
  • 光谱相机的成像方式
  • 在机器视觉检测中为何选择线阵工业相机?
  • RHCE 第一次作业
  • java 洛谷题单【算法2-1】前缀和、差分与离散化
  • 美国国土安全部终止资助,CVE漏洞数据库项目面临停摆危机
  • 【现代深度学习技术】循环神经网络03:语言模型和数据集
  • 记录jdk8->jdk17 遇到的坑和解决方案
  • 跨浏览器书签同步方案:WebDAV + Floccus插件实操指南
  • Redis 的不同数据结构分别适用于哪些微服务场景
  • vue3+vite 多个环境配置
  • 零浪费,最高效率:通往0%废品率的道路
  • 入门-C编程基础部分:6、常量
  • STM32启动流程详解
  • 【JVM优化】Minor GC的频率高的原因
  • element-ui自定义主题
  • C++23 中的可选扩展浮点类型:std::float{16|32|64|128}_t 和 std::bfloat16_t
  • ✅ MySQL 事务 MVCC ROLLBACK
  • Lua 第6部分 函数
  • 金融的未来
  • 可直接打开网站的网页/北京网站seo
  • 免费的行情网站推荐大全/网络营销课程总结
  • 大学网站html模板下载/windows优化大师有毒吗
  • 网络编程就是做网站么/武汉楼市最新消息
  • 兰州网站备案谁家做/宁波seo推广定制
  • 重庆网页制作工作室/seo是什么服务器