【数据结构与算法】排序算法(js)

保姆级教程:手把手教你用Python逆向分析极验4.0滑块验证码的w参数生成逻辑 本文提供了一份详细的Python逆向工程教程,手把手教你分析极验4.0滑块验证码的w参数生成逻辑。通过HTTP请求分析、JavaScript逆向和加密算法复现,帮助开发者深入理解验证码防护机制,并实现高效的自动化解决方案。教程涵盖AST反混淆、轨迹生成算法和AES加密等核心技术,适合中高级开发者提升逆向工程能力。 阅读详情

冒泡排序

比较所有相邻的两项,如果第一个比第二个大,则交换他们

最好O(n) 最坏O(n^2) 平均O(n^2) 稳定

function bubbleSort(array) {
  const length = array.length
  // 外层循环控制比较的轮数
  for (let i = 0; i < length; i++) {
    // 里层循环控制每一轮比较的次数
    // 使用 length - 1 - i 是为了减去外层循环已经排序过的趟数,优化次数
    for (let j = 0; j < length - 1 - i; j++) {
      if (array[j] > array[j + 1]) {
        let temp = array[j]
        arr[j] = arr[j + 1]
        arr[j + 1] = temp
      }
    }
  }
  return array
}
let arr = [1, 5, 3, 2, 4]
console.log(bubbleSort(arr))
// [1, 2, 3, 4, 5]

插入排序

假设第一项已经排序了,接着和第二项进行比较,取出第二项的索引和值,判断第二项应该待在原位还是插到第一项之前?这样,头两项就已经正确排序,接着已经排序好的再和第三项比较(它应该插入到第一、第二、还是原位置?),以此类推

最好O(n) 最坏O(n^2) 平均O(n^2) 稳定

function insertionSort(arr) {
  const length = arr.length
  // 假设索引0已经排序,所以从索引1开始遍历
  for (let i = 1; i < length; i++) {
    let j = i
    let temp = arr[i]
    // 循环遍历前一项
    while (arr[j - 1] > temp && j > 0) {
      // 将前一项后移
      arr[j] = arr[j - 1]
      j--
    }
    // 次数 j 既为需要插入的索引
    arr[j] = temp
  }
  return arr
}
let arr = [1, 5, 3, 2, 4]
console.log(insertionSort(arr))
// [1, 2, 3, 4, 5]

模拟换牌

function insertionSort(arr) {
  // 1.准备一个新数组,用来存储抓到手里的牌,开始先抓一张牌进来
  let handle = []
  handle.push(arr[0])

  // 2.从第二项开始依次抓牌,一直把台面上的牌抓光
  for (let i = 1; i < arr.length; i++) {
    // A 是新抓的牌
    let A = arr[i]
    // 和 HANDLE 手里的牌依次比较(从后向前比)
    for (let j = handle.length - 1; j >= 0; j--) {
      // 没一次要比较的手里的牌
      let B = handle[j]
      // 如果当前的新牌 A 比要比较的牌 B 大,就把 A 放到 B 的后面
      if (A > B) {
        handle.splice(j + 1, 0, A)
        break
      }
      // 已经比到第一项,我们把新牌放到手中最前面即可
      if (j === 0) {
        handle.unshift(A)
      }
    }
  }
  return handle
}
let arr = [1, 5, 3, 2, 4]
console.log(insertionSort(arr))
// [1, 2, 3, 4, 5]

快速排序

分而治之思想

  • 选择基准值,一般是将开头、中间、末尾三个数先进行排序,中间值作为基准值

  • 将数组分为左右两个子数组:小于基准值得元素组成的子数组和大于基准值得元素组成的子数组

  • 对这两个子数组进行快速排序(递归)

最好O(nlog^n) 最坏O(n^2) 平均O(nlog^n) 不稳定

function quickSort(arr) {
  // 4.结束递归,(当 arr 中小于等于一项,则不用处理)
  if (arr.length <= 1) {
    return arr
  }
  // 1.找到数组的中间值,在原有的数组中把它移除
  let minddleIndex = Math.floor(arr.length / 2)
  let minddleValue = arr.splice(minddleIndex, 1)[0]
  // 2.准备左右两个数组,循环剩下数组中的每一项,
  // 比当前项小的放到左边数组中,反之放到右边数组中
  let arrLeft = []
  let arrRight = []
  for (let i = 0; i < arr.length; i++) {
    let current = arr[i]
    current < minddleValue ? arrLeft.push(current) : arrRight.push(current)
  }
  // 3.递归方式让左右两边的数组持续这样处理,一直到左右两边都排好序为止
  // 最后让左边+中间+右边拼接为最后的结果
  return quickSort(arrLeft).concat(minddleValue, quickSort(arrRight))
}
let arr = [1, 5, 3, 2, 4]
console.log(quickSort(arr))
// [1, 2, 3, 4, 5]
腾讯Android开发面试准备指南及参考答案 腾讯元宝高级Android开发职位面试准备指南 该职位要求扎实的Kotlin基础、架构设计能力和性能优化经验,重点关注Android客户端开发。面试流程约3轮,支持线上面试,流程较快。候选人需准备以下核心内容: 基础技术:Kotlin特性、Android开发生命周期、多线程编程 架构设计:MVVM/MVI模式应用、组件化解耦方案 性能优化:流畅度提升、内存管理、启动时间优化等实战案例 加分技能:Jetpack Compose开发、音视频处理、跨平台开发经验 建议结合项目经验准备具体案例,突出技术深度和问题解 阅读详情

相关推荐

android 运动目标检测_MindSpore应用案例:AI对篮球运动员目标的检测

MindSpore作为一个端边云协同的开源的全场景AI框架,今年3月份开源以来,受到了业界的广泛关注和应用,欢迎大家参与开源贡献、模型众智合作、行业创新与应用、学术合作等,贡献您在云侧、端侧 (HiMindSpore 应用程序)、边侧以及安全领域的应用案例。MindSpore与您在AI领域共同成长,让AI使能千行百业,释放出强大的生产力。本文讲述的是MindSpore对篮球运动员目标的检测应用,通...

weixin_33603813的博客 834

javascript十大经典排序算法 js数据结构与算法

排序算法是《数据结构与算法》中最基本的算法之一 排序算法中的复杂度与稳定性如下图所示: 1.冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端...

一只京大的博客 511

从NVLINK到EthLink:GPU互联技术演进全解析(含最新行业趋势)

本文深入解析了从NVLINK到EthLink的GPU互联技术演进,重点剖析了Scale-up与Scale-out两种核心范式。文章详细对比了NVLINK、UALINK及革命性的EthLink技术,后者创新性地将以太网改造为支持Load/Store与RDMA双语义的高性能互联网络,旨在打破封闭生态,实现高性能与开放性的统一。最后,文章提供了技术选型指南并展望了未来以以太网为主导、语义融合的行业趋势。

weixin_29204749的博客 177

JavaScript实现数据结构各种排序算法

今天面试,我的数据结构真的烂,做一波小总结吧,哎,真难受啊~ //测试数据 let arr = [1,2,5,1,3,6,7,1,3,4,12,41,23,2,33,23,45,0] console.log(`原始数组:${arr}`) /* 插入排序 1.直接插入排序 2.折半插入排序 3.希尔排序 */ // 根据不同的查找方法来找到插入的位置把插入排序分为不同的类别 /**算法:直接插入排序 * 时间复杂度:最优O(n) 最差O(n^2) * 空间复杂度:O(1) * 稳定

weixin_44726717的博客 152

Python爬虫实战:绕过B站-352风控的完整解决方案

网络爬虫技术是数据采集和自动化测试的重要工具,其核心原理是通过模拟HTTP请求获取网页数据。在实践过程中,开发者常会遇到网站反爬机制,这涉及请求指纹识别、IP行为分析等安全技术。这些风控措施的价值在于保护网站数据安全和服务器资源,广泛应用于电商、社交、内容平台等场景。针对B站等平台的-352风控错误,需要综合运用请求头伪装、会话管理、参数签名破解等技术方案。本文重点探讨如何通过构建完整的浏览器级请求头、管理Cookie会话、以及使用Playwright等浏览器自动化工具,有效解决Python爬虫在B站数据采

weixin_33912638的博客 391

无人机飞控技术最详细解读

已剪辑自: https://zhuanlan.zhihu.com/p/64519280[导读]被称作是“飞行器的大脑”的飞控到底是什么?以前,搞无人机的十个人有八个是航空、气动、机械出身,更多考虑的是如何让飞机稳定飞起来、飞得更快、飞得更高。如今,随着芯片、人工智能、大数据技术的发展,无人机开始了智能化、终端化、集群化的趋势,大批自动化、机械电子、信息工程、微电子的专业人材投入到了无人机研发大潮中,几年的时间让无人机从远离人们视野的军事应用飞入了寻常百姓家、让门外汉可以短暂的学习也能稳定可靠的飞行娱乐。不可

qq_41854911的博客 1万+

GitHub 上值得前端学习的数据结构与算法项目

阿里十分注重你对源码的理解,对你所学,所用东西的理解,对项目的理解。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

2401_84435838的博客 1121

【学习系列】SAP RAP 3:添加多层级的子节点

本文详细介绍了在SAP ABAP RAP开发中如何创建多层级业务对象。主要内容包括:1)创建明细和计划行层级的数据库表及CDS视图;2)使用association和composition关键字建立父子关联关系;3)创建各层级的投影视图并设置层级关系;4)更新行为定义,添加关联、操作权限等控制;5)更新服务定义公开新增视图;6)创建元数据扩展优化UI展示。通过这一系列步骤,实现了从抬头到明细再到计划行的完整业务对象层级结构,为后续UI功能扩展奠定了基础。

DeveloperMrMeng的博客 587

JavaScript实现数据结构与算法(六)排序算法

JavaScript实现数据结构与算法(六)排序算法(五)排序算法1. 简单排序1.1 冒泡排序1.2 选择排序1.3 插入排序2. 高级排序2.1 希尔排序2.2 快速排序2.3 插入排序 学习笔记:coderwhy的JavaScript实现数据结构与算法的课程 其他章节笔记链接 1. 重要性 2. 线性结构 3. 哈希表 4. 树结构 5. 图结构【本文】 6. 排序和搜索 (五)排序算法...

weixin_43545225的博客 1493

企业数据治理体系中的AI与业务融合:架构师的3个成功案例

企业数据治理的痛点从来不是“有没有做”,而是“做了之后有没有用”——很多企业花了数百万建数据仓库、做元数据管理,最后却陷入“数据躺在库里睡大觉”“AI模型因数据质量差而失效”的困境。本文通过零售、金融、制造3个真实案例,拆解架构师如何用AI连接数据治理与业务场景:从“客户画像不准”到“精准推荐提升30%转化率”,从“欺诈检测漏报”到“实时拦截减少50%损失”,从“库存积压”到“供应链周转率提升20%”。如何让数据治理从「合规驱动」转向「价值驱动」?

AI 原生应用开发的博客 992

USB2.0协议解读

就写到这吧,其他协议层等属于软件需要了解的东西了。简单看了下,本文总结的有点乱,有两个原因吧,其一是理解的不够透彻,无法用简单明了的语言总结;其二是感觉这个协议文档章节划分的也不是很好,有点大杂烩。

qflook的博客 3673

js实现数据结构及算法之排序算法

冒泡排序 冒泡排序是最慢的排序算法之一,数据值会像起跑一样从数组的一端漂浮到另一端 动画演示 js实现 var CArray = function () { this.dataStore = [9...

qq_37555524的博客 162

MTK平台WiFi学习--Wi-Fi 连线/断线问题初步分析

摘要:本文详细介绍了MTK平台WiFi连接问题的日志分析方法。文章首先阐述了WiFi连接的标准流程,包括指令接收、BSSID选择、信道分配、认证关联、四次握手和DHCP获取等关键步骤。针对常见故障场景,如选网失败、信道申请失败、认证关联失败、四次握手失败等,提供了具体的日志分析方法和排查思路,包括识别关键日志、分析状态码、结合固件日志和抓包数据等。文章还特别强调了不同故障场景下需要收集的日志类型和分析要点,为WiFi连接问题的定位提供了一套系统化的解决方案。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 1590

【JS数据结构与算法】排序算法的封装

简单排序:冒泡排序、选择排序、插入排序 高级排序:希尔排序、快速排序、堆排序、归并排序 封装列表 在开始编写排序算法之前,先封装一个列表存储数据,定义相应的属性,再在原型上封装不同的排序算法。 ...

29的博客 300

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【数据结构与算法】JavaScript实现排序算法

假如有数组有10个数据,第1个数据为黑色,增量为5。那么第二个为黑色的数据index=5,第3个数据为黑色的数据index = 10(不存在)。所以黑色的数据每组只有2个,10 / 2 = 5一共可分5组,即。可以看到效率从大到小分别是:O(1)> O(logn)> O(n)> O(nlog(n))> O(n²)> O(2n),先选出一个数据(比如65),将比其小的数据都放在它的左边,将比它大的数据都放在它的右边。以下代码实现中采用希尔排序原稿中建议的增量即。图中d表示增量gap。快速排序的核心思想是。

一个前端开发者 1211

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

《数据结构》课程设计-排序算法可视化

《数据结构》课程设计-js实现排序算法可视化 一.数据可视化 1.什么是数据可视化 数据可视化主要旨在借助于图形化手段,清晰有效地传达与沟通信息。但是,这并不就意味着数据可视化就一定因为要实现其功能用途而令人感到枯燥乏味,或者是为了看上去绚丽多彩而显得极端复杂。为了有效地传达思想概念,美学形式与功能需要齐头并进,通过直观地传达关键的方面与特征,从而实现对于相当稀疏而又复杂的数据集的深入洞察。然而,设计人员往往并不能很好地把握设计与功能之间的平衡,从而创造出华而不实的数据可视化形式,无法达到其主要目的,也就是

weixin_43906149的博客 3924

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【数据结构与算法】——排序算法(JavaScript)

排序算法

m0_50785976的博客 395

【JavaScript数据结构与算法】八、排序算法

文章目录1 冒泡排序(Bubble Sort)原理冒泡排序实现2 选择排序(Selection Sort)原理选择排序实现3 插入排序(Insertion Sort)原理插入排序实现4 希尔排序(Shell Sort)原理希尔排序实现5 归并排序(Merge Sort)原理归并排序实现6 快速排序(Quick Sort)原理快速排序实现7 堆排序(Heap Sort)原理堆排序实现8 计数排序(Counting Sort)原理计数排序实现9 桶排序(Bucket Sort)原理桶排序实现10 基数排序(Ra

ColdCoder的博客 749

JS---实现数据结构/排序算法

排序算法冒泡排序快速排序插入排序选择排序 冒泡排序 前往后后依次比较相邻两个元素大小,大的元素往后挪,比较完第一遍后,最大的元素排到了数组的最后一位 从第i(1)个数字开始比较与后面的数字比较,小的放在前面位置互换 一直比较到最后 时间复杂度为O(n^2) 快速排序 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据要小,再按这种方法对...

weixin_43091563的博客 213

JavaScript数据结构与算法 - 排序算法

1.认识大O表示法 在算法的藐视中,我们可以通过类似的快捷方式来描述计算机算法的效率。 在计算机中,这种粗略的度量被称作“大O”表示法。 在数据项个数发生变化是,算法的效率会跟着发生变化。 我们通常使用一种算法的速度会如何跟随数据量的变化的。 符号 名称 O(1) 常数的 O(log(n)) 对数的 O(n) 线性的 O(n^2) 平方的 O(2^n) 指数的 ...

qq_43955202的博客 290

[数据结构与算法]排序算法汇总(JavaScript版)

JavaScript所有排序算法汇总 一、冒泡排序 Array.prototype.bubbleSort = function () { for (let i = 0; i < this.length - 1; i++) { for (let j = 0; j < this.length - 1 - i; j++) { if (this[j] > this[j + 1]) {

DaftJayee的博客 334

数据结构中各种排序算法的js实现

复习数据结构中的各个排序算法,主要为了自己查看~ 排序1. 冒泡排序2. 选择排序3. 直接插入排序4. 希尔排序 1. 冒泡排序 <script> function bubbleSort(arr){ for(let i=0; i<arr.length ;i++){ for(let j=arr.length-2; j>=i ;j--){ if(arr[j+1] < arr[j]){ [arr[j

IvyMemphis的博客 297

JavaScript数据结构与算法——基本排序算法

之前以下三种排序算法属于三篇文章,由于都属于基本排序算法,就合并到了一篇,便于对比。 1、冒泡排序 冒泡排序算法简介: 冒泡排序算法,它是最慢的排序算法之一,但也是一种最容易实现的排序算法。之所以叫冒泡排序是因为使用这种排序算法排序时,数据值会像气泡一样从数组的一端漂浮到另一端。假设正在将一组数字按照升序排列,较大的值会浮动到数组的右侧,而较小的值则会浮动到数组的...

一位不知名小前端的一些笔记 4317

javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较

javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较 一、数组测试平台。 javascript数据结构与算法--基本排序(封装基本数组的操作),封装常规数组操作的函数,比如:插入新数据,显示数组数据,还有交换数组元素等操作来调用不同的排序算法   function CArray(numElements) { this.dataStore = []; t...

weixin_33884611的博客 147

数据结构与算法JavaScript - 基本排序算法分析

javascript数据结构与算法–基本排序算法分析javascript中的基本排序算法对计算机中存储的数据执行的两种最常见操作是排序和检索,排序和检索算法对于前端开发尤其重要,对此我会对这两种算法做深入的研究,而不会和书上一样只是会贴代码而已,下面我会一步步从自己的理解的思路来一步步学习各个排序的思想。不过这些算法依赖于javascript中的数组来存储数据。最后我会来测试下基本算法(冒泡排序,选

LittleUniverse 554

JavaScript数据结构之 —— 10排序算法和搜索算法

目录排序算法冒泡排序选择排序插入排序归并排序快速排序 排序算法 开始排序算法之前,我们先创建一个数组来表示待排序和搜索的数据结构: function ArrayList(){ var array = []; //存储 this.insert = function(item){ //添加元素 array.push(item); }; this.toString= function(){ //方便查看数组输出结果 return array.join(); }; } 网上找的一张图: 冒泡排

邪人君子的博客 632
上一篇: 【JavaScript】去重
下一篇: 【个人杂谈】程序员十步学习法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值