javascript实现经典排序

2023-11-11

排序是我们生活中经常面对的问题,做操时需要从小到大排序,我们逛电商网站,常常按价格排序。像这样我们把多个序列按照关键词递增(递减)的方式进行排列,使得序列成为一个按关键字有序的序列,这样的操作就称为排序。

1.冒泡排序

冒泡排序是一种交换排序,它的基本思想是:两两比较相邻的关键字,如果反序则交换位置,知道没有反序的记录为止

时间复杂度:最快的情况下是所有的元素已经是正序   冒泡排序的时间复杂度为o(n²),代码如下

function bubleSort (arr) {

      var len = arr.length;

       for(var i = 0;i < len;i++){

                for(var j = 0;j < len-l-i;j++){

                if(arr[i]>arr[i+1]){

                var temp = arr[j+1];

                 arr[j+1] = arr[j];

                 temp = arr[j]

                 }

            }

       }

           return arr

}

2.选择排序

冒泡排序的思想就是不断交换位置,而选择排序的初步思想就是在排序时找到合适的关键字再做交换。分析它的时间复杂度发现,无论最好最差的情况,其比较次数都是一样多,第i趟排序需要进行i-1次关键字的比较,此时需要比较n(n-1)/2,总的时间复杂度依然是o(n²),代码如下

 function selectSort(arr){

  var len = arr.length;

  var minIndex 

    for(var i = 0 ;i<len;i++){

    minIndex = i;

       for(var j = i+1;j < len;j++){

          if(arr[j]<arr[minIndex]){

         minIndex = j;

         }

    }

   var temp = arr[i];

    arr[i] = arr[minIndex];

   arr[minIndex] = temp;

    }

return arr

}

3.插入排序

插入排序的理解就像手里的扑克牌,抓牌的时候把牌按顺序在手牌中插入,插入排序的时间复杂度为o(n²)

function insertsort(){

var len = arr.length;

var pre ,current;

for(var i = 0; i<arr.len;i++){

pre= i -1 ;

current = arr[i];

while(pre>0&&arr[pre]>current){

 arr[pre+1]= arr[pre];

pre--

}

arr[pre] = current;

}

return arr

}

4.归并排序

归并排序的宗旨是递归,总的时间复杂度为o(nlogn)

 

  function mergeSort(arr){

         var len = arr.length;

          if(len<2){

          return arr 

           }

       var middle = Math.floor(len/2);

         var left = arr.slice(0,middle);

         var right = arr.slice(middle);

        return merge(mergeSort(left),mergeSort(right))

  };

    function merge(left,right)(){

     var result = {};

    while(left.length>0&&right.length>0){

    if(left[0]<=right[0]){

       result.push(left.shift())

     }

     else{

       result.push(right.shift)

       }

    while(left.length){

    result.push(left.shift())

    }

  while(right.length){

    result.push(right.shift())

    }

return result

    }

   }

5.快速排序

通过一趟排序将待排记录分割成独立的两部分,其中一部分关键字均比另一部分关键字小,则可分别对这两部分记录继续进行排序,快速排序的时间复杂度虽然达到了o(n²),但是比大多数平均时间复杂度为o(nlogn)的排序算法表现更好

var quickSort = function(arr) {

  if (arr.length <= 1) {//如果数组长度小于等于1无需判断直接返回即可 

        return arr;

    }

  var pivotIndex = Math.floor(arr.length / 2);//取基准点 

  var pivot = arr.splice(pivotIndex, 1)[0];//取基准点的值,splice(index,1)函数可以返回数组中被删除的那个数

  var left = [];//存放比基准点小的数组

  var right = [];//存放比基准点大的数组 

  for (var i = 0; i < arr.length; i++){ //遍历数组,进行判断分配 

    if (arr[i] < pivot) {

      left.push(arr[i]);//比基准点小的放在左边数组 

    } else {

      right.push(arr[i]);//比基准点大的放在右边数组 

    }

  }

         //递归执行以上操作,对左右两个数组进行操作,直到数组长度为<=1; 

  return quickSort(left).concat([pivot], quickSort(right));

}

}

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript实现经典排序 的相关文章

  • 试题管理系统[详细步骤&内含源码]

    试题管理系统 需求 1 数据库中试题信息的动态展示功能 2 增加试题 3 删除单个试题功能 删除多个试题功能 4 分页查询并展示功能 所用技术 MyBatis SpringMVC idea Maven 数据库 Jsp 步骤 建表 建立表格
  • 对比学习做了什么?

    什么是对比学习 对比学习貌似处于 无明确定义 有指导原则 的状态 什么是对比学习呢 这个是微信链接 全文比较长 但是逻辑框架还是不错的 如果想要更快速的了解什么是对比学习或者说对比学习是怎么做的 可以看SimCLR这个模型文章 该文章可以说
  • python小游戏 滑雪小游戏设计与实现 (源码)

    文章目录 0 项目简介 1 游戏介绍 2 实现效果 3 开发工具 3 1 环境配置 3 2 Pygame介绍 4 具体实现 5 最后 0 项目简介 Hi 各位同学好呀 这里是L学长 今天向大家分享一个今年 2022 最新完成的毕业设计项目作
  • 公众号内容拓展学习笔记(2021.10.1)

    公众号内容拓展学习笔记 2021 10 1 今日要点 ICCV 2021 英伟达新研究 直接通过视频就能捕获3D人体动作 Abstract 英伟达新研究直接通过视频就能捕获3D人体动作 Paper Physics based Human M
  • 【java进阶08:异常】finally关键字、自定义异常类、用户业务作业、军队武器作业

    java中的异常处理机制 异常在java中以类和对象的形式存在 那么异常的继承结构是怎样的 我们可以使用UML图来描述以下继承结构 画UML图的工具 Rational Rose starUML等 Object下有Throwable 可抛出的
  • 计算机硬件基础-----写在最后

    今天2021 5 15 天气阴有雨 今天宜 睡觉 忌 上自习 天气预报报着今天有雨 还真就下了一天的雨到现在还没有停 上午在实验室又坐了一上午 虽然下周硬件和数据库就要考试了 因为小程序比赛最近一直也没有时间来应对考试 但下午还是选择和同学
  • 对大学生活的几点建议

    List item 在大学不要对人随意的掏心掏肺 因为你的痛苦只有你自己知道 其他人没有经历过 不会懂 也许你掏心掏肺的说一大通 在他人眼中就是幼稚 就是不成熟 我还记得自己刚上大学 因为自卑 几乎没和其他人有来往 现在虽比起以前强了 但是
  • 动态类型语言和静态类型语言

    本文内容 动态类型语言 Dynamically Typed Language 静态类型语言 Statically Typed Language 比较 参考资料 历史版本 记得我刚毕业时在第一家公司 离职那天领导找我谈话 让我暂时别走 看 B
  • 普通用户没有管理员权限但是可以安装软件或者打开Admin权限的CMD

    案例分析 除了IT肯定还有行政的吗 那IT肯定跟行政玩的好打好关系才可以顺风顺水啊 那行政肯定有些东西打开需要权限的啊 例如IT 帮别人解锁账号的工具 自己忙嘛 小事情肯定你懂的哈哈哈 偷个懒 不废话 上代码 顺便代码解析 其实就是通过se
  • 性能测试系列(二)

    性能测试之性能分析命令 1 CPU分析 a cpu基本信息 命令 lscpu Cpu架构 64 位 Cpu 核心数 6 NUMA UMA节点数为 2个 显示值加 1 Cpu的核心频率 说明此服务器为虚拟机 此服务器的 cpu使用的是 使用的
  • 如何使用python实现自动化办公?全网最全干货来了!

    大家好 接下来我们来学习如何使用python 实现自动化办公 而不需要我们人工 或者说尽量减少我们人工的参与 文末领读者福利 自动化办公在我们的生活中非常的常见 让我们看看通过本博客你可以学习到python哪些自动化操作 看完这幅图 大家就
  • Python Web开发的完整指南

    博客 https somenzz cn 电脑阅读更方便 阅读原文可访问文中的链接 学了 Python 这么长时间了 终究觉得编程语言仅仅是个工具 要想通过技术实现自己的价值 终究离不开具体的应用场景 而应用场景繁多 我们的时间和精力都是有限
  • 前端(技巧+踩坑记录)

    1 计算属性用法 2 map返回数据 3 过渡效果 移动端过渡 效果图 更多过渡效果 进入 离开 列表过渡 Vue js pc端过渡动画 直接用el组件 自带过渡 4 el分页组件 5 svelte js vite使用sass 5 1 下载
  • TOP100案例分享 “预测性维护”

    科技领域每年有哪些技术和产品正在成为不可磨灭的 标记 和 符号 国内外科技圈又有哪些人和组织最值得点赞 哪些创新案例最值得借鉴和复盘 由麦思博 msup 有限公司主办的 以 人工智能时代的研发战略演进 为主方向的第六届全球软件案例研究峰会
  • 求两个数的 最大公约数 和最小公倍数

    最大公约数 思路 假设有两个数a b 求a b的最大公约数 令a b 得到的结果用tmp记录 再将b的值给a tmp的值给b 此时a的值变成了b b的值变成了tmp 循环进行a b 直至a b的结果为0时 循环结束 此时b的值即为最小公约数
  • QString 转换为 char */ unsigned char *

    1 QString 转换为 char 将 QString 转 char 需要用到 QByteArray 类 QByteArray 类的说明详见 Qt 帮助文档 因为 char 最后都有一个 0 作为结束符 而采用 QString toLat
  • 数据分析入门-SARIMA模型案例分析(超详细)

    由于代码中注释已经非常的清晰 文章中就不过多叙述了 直接上代码 代码如下 在开始之前先导入所需要的包 import warnings do not disturbe mode warnings filterwarnings ignore i
  • 9.9+9.14字节三轮面试手撕代码记录

    一 根据字符出现的频率重新排列字符串 如 happy gt pphap import java util Scanner import java util Map import java util HashMap import java u
  • 电感升压(boost电路)感性理解

    目录 前言 一 电感升压基本原理 二 工作原理步骤 1 开关闭合 给电感和电容充电 电容获得输入电压 2 开关断开 电感继续给电容充能 电容获得更高电压 总结 前言 以前在消费类小家电方案中 经常用到电感升压的应用 一个很典型的应用是手持小
  • sh脚本报错“eval: line 1: syntax error: unterminated quoted string”

    有个之前一直正常运行的脚本 突然报错了 eval line 1 syntax error unterminated quoted string 提示也比较直接eval使用出的问题 过滤一下脚本内容 果然找到了一个疑似问题代码 eval ec

随机推荐

  • 切割列表[]

    import sys def sliceABC sequence start 0 K len sequence if start gt K print 切割数量超出范围 sys exit return sequence start K se
  • Kaplan-Meier生存曲线绘制

    Kaplan Meier生存曲线绘制 生存分析研究的是某个事件发生之前过去的时间 在临床研究中最常见的应用就是死亡率的估计 预测患者的生存时间 不过生存分析也可以应用于其他领域如机械故障时间等 在R中 survival包中有很多函数可以对生
  • 定根最小树形图 朱刘算法 luogu P4716

    https www luogu org problem P4716 include
  • python混淆矩阵实证分析_如何在Python中编写混淆矩阵?

    I wrote a confusion matrix calculation code in Python def conf mat prob arr input arr confusion matrix conf arr 0 0 0 0
  • Google Colab 读取/存储 云盘内的文件

    背景 Google Colaboratory是谷歌开放的一款研究工具 主要用于机器学习的开发和研究 这款工具让广大的AI开发者可以使用免费的GPU 在训练模型时 使用GPU自然速度飞快 那么训练完之后最重要的自然就是将训练出来的模板数据保存
  • 华为再发新版鸿蒙OS系统!新增超级终端功能:可媲美iOS系统

    此文章转自乐字节 一生万物 万物归一 这不是哪部武侠小说的招式 也不是哪部哲学作品的思想 它是华为鸿蒙系统的设计理念 化简为繁 精妙绝伦 相信大家都知道 自从华为推送了鸿蒙OS手机Bate版本系统以后 不少参与鸿蒙系统内测用户便纷纷反馈 在
  • XCTF:NewsCenter

    题目如下 因为有输入框 我习惯初步判断它为sql注入 1 测试是否存在注入点 输入 1 结果报错了 然后尝试 1 2 知道存在注入 且为字符型注入 然后进行字段数猜测 直到字段数为4开始报错 3 尝试获得显示位 4 查库名 5 查表名 6
  • Python计算出给定的时间段的具体日期列表-大全

    由于工作中经常用到关于用户自定义时间 来进行后台数据的查询 特意整理了一下工作中常用的到的关于时间列表的一个函数 可以计算出某一年中的具体哪个周的开始和结束日期 某个周的具体日期列表 2015年38周 自定义时间段的具体日期列表 20150
  • 华为OD机试真题-找出两个整数数组中同时出现的整数-2023年OD统一考试(B卷)

    题目描述 现有两个整数数组 需要你找出两个数组中同时出现的整数 并按照如下要求输出 1 有同时出现的整数时 先按照同时出现次数 整数在两个数组中都出现并且出现次数较少的那个 进行归类 然后按照出现次数从小到大依次按行输出 2 没有同时出现的
  • 基于人工大猩猩部队优化CNN-LSTM(GTO-CNN-LSTM)多变量时间序列预测(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 专家学者根据对人类视觉的研究 提出了注意力
  • win7虚拟图形服务器,ZNetCManager win7版

    ZNetCManager是一款虚拟串口服务器软件 它可以在你的电脑上构建出多个虚拟串口 不过功能和真实串口是一样的 你可以通过软件将数据传输到局域网内其他的串口设备上 让您即便是没有串口 也能对串口进行通信 ZNetCManager功能介绍
  • termius设置中文 v7.0.1附使用教程

    提起Windows平台远程终端 XShell的大名想必不用多说了 但它也只有Windows版本 携带非常不方便 为此小编今日要推荐的是termius全平台的远程终端 该软件不仅涵盖了Windows Linux OSX 还支持Android和
  • 几种存segmentation mask方法对比

    发现同一幅图的原图 jpg 1920 1080 1920 times 1080 1920 1080 才 155K 其用 npy 存的 segmentation mask 居然有 2M 按理 segmentation mask 只有一个通道
  • 安装npm后,nrm ls 报错internal/validators.js:124 throw new ERR_INVALID_ARG_TYPE(name, ‘string‘, value)

    报错截图 1 首先检查node js是否安装成功 输入 node v 若可查看版本号 如图所示即安装成功 若不一致则重新安装node js node js官方下载地址 https nodejs org en download 2 查看npm
  • Selector和Epoll区别

    Selector和Epoll区别 select原理 原理还是轮询所有文件描述符 将文件描述符集合fd set从用户空间拷贝到内核空间 进入内核态 遍历所有文件描述符 对每个文件描述符调用poll 该函数返回一组标准的掩码 其各个位指示相应的
  • Python爬虫之Js逆向案例(16)- xx商品评论&店铺详情案例

    一次运行程序 同时获取一下内容 1 获取商店详情 2 获取当前商品评论 3 获取商品的问题 答案 效果如下图 下面会进行以下几步进行分析 下方演示过程全部使用chrome浏览器 1 抓包找到对应接口 商店详情https item soa j
  • 后端Windows软件环境安装配置大全[JDK、Redis、RedisDesktopManager、Mysql、navicat、VMWare、finalshell、MongoDB...持续更新中]

    文章目录 前言 1 安装 JDK 2 安装 Redis 3 安装 RedisDesktopManager Redis可视化工具 4 安装 Mysql 5 安装 navicat Mysql可视化工具 6 安装 VMWare 7 安装 fina
  • Qt-多层嵌套界面类对象之间信号连接的一种方法-信号中转类

    项目中存在多个界面类对象 并且存在比较深的嵌套关系 这时候如果希望连接顶层的对象信号到底层的对象槽 一种方法是逐级连接信号 但是这种方法要写很多个connect函数 并且对不熟悉此代码的人来说 需要一层一层跟进才知道这个信号最终由哪个槽函数
  • 【Python】字符转换为 ASCII 码

    ord 函数将单个字符转换为 ASCII 码 chr相反 print ord A ord b print list map ord a z c print list map chr 97 122 99 输出结果 65 98 97 122 9
  • javascript实现经典排序

    排序是我们生活中经常面对的问题 做操时需要从小到大排序 我们逛电商网站 常常按价格排序 像这样我们把多个序列按照关键词递增 递减 的方式进行排列 使得序列成为一个按关键字有序的序列 这样的操作就称为排序 1 冒泡排序 冒泡排序是一种交换排序