网站首页 > 技术文章 正文
前言
有是一篇面经,今天面经不同于以往。这次的内容是算法。虽说我们日常开发用到算法的场景并不多,但是作为面试这是一道永远都要跨过去的槛。
开始算法之前,贴上之前《面经》系列的文章:
元宵节,猿宵节,写代码之余面经走一波:JavaScript篇
“金三银四”,让我们愉快的开始准备Web面经吧:JavaScript-上
正文
一般来说时间/空间复杂度是必问的内容,所以先贴一个常用表:
常考排序
Bash
冒泡:
function bubbleSort(arr) {
let len = arr.length;
for (let i = 0; i < len; i++) {
for (let j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j+1]) {
[arr[j + 1], arr[j]] = [arr[j], arr[j + 1]];
}
}
}
return arr;
}
没啥好解释的了吧?
快排:
Bash
function quickSort(arr, left, right) {
let len = arr.length;
let partitionIndex;
left = typeof left !== 'number' ? 0 : left;
right = typeof right !== 'number' ? len - 1 : right;
if (left < right) {
partitionIndex = partition(arr, left, right);
quickSort(arr, left, partitionIndex - 1);
quickSort(arr, partitionIndex + 1, right);
}
return arr;
}
function partition(arr, left, right) {
let pivot = left;
let index = pivot + 1;
for (let i = index; i <= right; i++) {
if (arr[i] < arr[pivot]) {
[arr[i], arr[index]] = [arr[index], arr[i]];
index++;
}
}
[arr[pivot], arr[index - 1]] = [arr[index - 1], arr[pivot]];
return index - 1;
}
选择排序:
Bash
function selectionSort(arr) {
let len = arr.length;
let minIndex;
for (let i = 0; i < len - 1; i++) {
minIndex = i;
for (let j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
}
return arr;
}
插入排序:
Bash
function insertionSort(arr) {
let len = arr.length;
let preIndex, current;
for (let i = 1; i < len; i++) {
preIndex = i - 1;
current = arr[i];
while (preIndex >= 0 && arr[preIndex] > current) {
arr[preIndex + 1] = arr[preIndex];
preIndex--;
}
arr[preIndex + 1] = current;
}
return arr;
}
归并排序:
Bash
function mergeSort(arr) {
let len = arr.length;
if(len < 2) {
return arr;
}
let middle = Math.floor(len / 2),
left = arr.slice(0, middle),
right = arr.slice(middle);
return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right){
let result = [];
while (left.length && right.length) {
if (left[0] <= right[0]) {
result.push(left.shift());
} else {
result.push(right.shift());
}
}
result.push(...left);
result.push(...right);
return result;
}
堆排序:
Bash
var len;
function buildMaxHeap(arr) {
len = arr.length;
for (let i = Math.floor(len / 2); i >= 0; i--) {
heapify(arr, i);
}
}
function heapify(arr, i) {
let left = 2 * i + 1;
let right = 2 * i + 2;
let largest = i;
if (left < len && arr[left] > arr[largest]) {
largest = left;
}
if (right < len && arr[right] > arr[largest]) {
largest = right;
}
if (largest !== i) {
[arr[i], arr[largest]] = [arr[largest], arr[i]];
heapify(arr, largest);
}
}
function heapSort(arr) {
buildMaxHeap(arr);
for (let i = arr.length - 1; i > 0; i--) {
[arr[0],arr[i]]=[arr[i],arr[0]];
len--;
heapify(arr, 0);
}
return arr;
}
尾声
这次总结的是一些排序的代码逻辑,如果有必要的话,下一篇来一些二叉树之类的。希望可以给大家带来帮助吧~
猜你喜欢
- 2025-06-09 平面几何算法:求点到直线和圆的最近点
- 2025-06-09 解决雪花算法生成的ID传到前端后精度丢失问题
- 2025-06-09 什么是非对称加密算法?(什么是非对称加密,有哪些特点)
- 2025-06-09 React18的diff算法(react-diff-view)
- 2025-06-09 「算法题」判断一颗二叉树是否对称
- 2025-06-09 经典监督式学习算法 - 决策树(决策监督制度)
- 2025-06-09 「西瓜哥说算法」从前序与中序遍历序列构造二叉树
- 2024-09-29 前端算法面试题 前端面试题csdn
- 2024-09-29 每天一道算法题——最长连续递增序列
- 2024-09-29 高级前端开发带你搞懂vue的diff算法
你 发表评论:
欢迎- 509℃几个Oracle空值处理函数 oracle处理null值的函数
- 508℃Oracle分析函数之Lag和Lead()使用
- 499℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 494℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 486℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 480℃【数据统计分析】详解Oracle分组函数之CUBE
- 459℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 459℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端定时器 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)