目录

冒泡排序

选择排序

插入排序

快速排序

总结


冒泡排序

冒泡排序比较所有相邻的两个项,如果第一个比第二个大,则交换它们。

首先随机生成一个100000的数组

var array = Array.from({length:100000},val=>Math.ceil(Math.random()*100000))

然后利用冒泡排序算法

function bubbleSort(arr){for(let i=0;i<arr.length;i++){for(let j=0;j<arr.length-i-1;j++){if(arr[j]>arr[j+1]){let temp = arr[j]arr[j]=arr[j+1]arr[j+1]=temp}}}return arr}bubbleSort(array)

为了可以看算法消耗的时间,在函数前后加上:

 console.time()bubbleSort(array)console.timeEnd()

用时44052ms

选择排序

选择排序算法是一种原址比较算法,找到数据结构中的最小值并将其放到第一位,接着找到第二小的值并将其放到第二位。

 function selectionSort(arr) {let minIndex, temp;for(let i = 0; i < arr.length - 1; i++) {minIndex = i;for(var j = i + 1; j < arr.length; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}return arr;
}console.time()selectionSort(array)console.timeEnd()

用时13698ms,速度比冒泡算法快

插入排序

插入排序每次排一个数组项,以此方式构建最后的排序数组。假定第一项已经排序了,接着它和第二项进行比较,判断第二项是待在原位还是插到第一项之前呢。这样,头两项就已经正确排序了,接着和第三项比较(它是插入到第一、第二还是第三的位置呢),以此类推。

function insertionSort(arr) {let preIndex, current;// 我们认为arr[0]已经被排序,所以i从1开始for (let i = 1; i < arr.length; 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;
}
console.time()
insertionSort(array)
console.timeEnd()

耗时只有7394ms左右

快速排序

 快速排序采用分而治之的方法,将原始数组分为比较小的数组。

(1)首先,从数组中选择一个值作为主元(pivot),也就是数组中间那个值

(2)创建两个指针(引用),左边一个指向数组第一个值,右边一个指向数组最后一个值,移动左指针直到我们找到一个比主元大的值,接着,移动右指针直到找到一个比主元小的值,然后交换他们,重复这个过程,知道左边指针超过了右边指针。这个过程将使得比主元小的值都排在主元之前,比主元大的值都排到了主元之后。这一步为划分(partition)。

(3)算法对划分后的小数组(较主元小的值组成的子数组,以及较主元大的值组成的子数组)重复之前的两个步骤,直至数组已完全排序。

function qSort(arr) {//声名并初始化左边的数组和右边的数组let left = [], right = [];// 使用数组第一个元素作为基准值let base = arr[0];//当数组长度只有1或者为空时,直接返回数组,不需要排序if (arr.length <= 1) return arr;//进行遍历for (let i = 1; i < arr.length; i++) {if (arr[i] <= base) {//如果小于基准值,push到左边的数组left.push(arr[i])} else {//如果大于基准值,push到右边的数组right.push(arr[i]);}}//递归并且合并数组元素return [...qSort(left), base, ...qSort(right)];}console.time()qSort(array)console.timeEnd()

耗时只有178ms!!!

总结

四种排序算法的比较,快速排序最好!

【JS算法】 排序算法及性能汇总相关推荐

  1. 排序算法--排序算法汇总

    排序算法无疑是学习数据结构中的重点内容,本文将给出排序算法的汇总. 下面是具体的实现: #include<stdio.h> #include<stdlib.h> #includ ...

  2. js 实现2的n次方计算函数_JS中数据结构与算法---排序算法

    排序算法的介绍 排序也称排序算法 (Sort Algorithm),排序是将 一组数据 , 依指定的顺序 进行 排列的过程 . 排序的分类 内部排序 : 指将需要处理的所有数据都加载 到 内部存储器( ...

  3. 用openAI写个js的排序算法(快速排序算法)

    文章目录 一.生成JS快速排序算法 二.openai还会给出调用方法 一.生成JS快速排序算法 这是一个通用的 JavaScript 排序算法.它使用的是快速排序算法. function sort(a ...

  4. JAVA算法-排序算法

    排序算法的介绍 排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类: 1) 内部排序: 指将需要处理的所有数据都加载到内部存储器(内存)中进行 ...

  5. java 算法 排序算法_Java七种排序算法以及实现

    Java常见七种排序算法以及实现 最近学习一些排序算法,怕自己以后忘记就打算整理起来供自己复习 萌新一枚学习Java没多久,以下仅供参考.如有错误希望大佬指正,欢迎大家在评论区交流探讨. 1.冒泡排序 ...

  6. php+堆排序算法,排序算法-堆排序-php

    什么是堆排序 堆排序是我们经常使用的排序算法,它是利用堆的结构进行排序,堆是一种二叉树结构,并且它的父节点的值都大于子节点或者都小于子节点,如果大于,就是大顶堆,如果小于就是小顶堆. 根据堆的定义,我 ...

  7. 数据结构与算法 / 排序算法 / 堆排序

    一.定义 借助堆结构实现的排序算法被称为堆排序. 二.过程说明 1.建堆 (1)方法1 原地建堆,对于数组来说,从前往后:对于树来说,从下向上. 将数组的第一个元素作为堆顶,第二个元素做向堆中插入数据 ...

  8. 数据结构与算法 / 排序算法(3)

    一.桶排序(Bucket sort) 1.原理 将要排序的数据分到几个有序的桶里,每个桶里的数据再进行排序.桶内的数据排序完毕之后,再把桶里的数据依次取出,组成的序列就是有序的了. 2.原地排序? 属 ...

  9. 数据结构与算法 / 排序算法(2)

    一.归并排序 1.原理 采用分治思想.将数组分成前后两部分,先将这两部分进行排序,然后再将二者合并即可. 2.原地排序? 不属于原地排序.因为每次合并都需要申请大小为 n 的临时数组用于保存合并之后的 ...

  10. 数据结构与算法 / 排序算法(1)

    零.前言 1.常用的排序算法总结 排序算法种类 时间复杂度 是否基于比较 冒泡.插入.选择 O(n^2) √ 快排.归并 O(nlogn) √ 桶.计数.基数 O(n) × 2.算法的内存消耗 - 原 ...

最新文章

  1. Vmware的 管理工具概述
  2. 使用DWR实现自己主动补全 相似百度搜索框的自己主动显示效果
  3. myeclipse中配置spring xml自己主动提示
  4. 软件测试优先级策略,软件测试策略基础(转载)
  5. 医药行业的契约锁电子签章应用场景:印章统一管,核心业务在线签
  6. Alexa Top 1000000
  7. 虚拟机安装OpenGauss企业版
  8. 2019java面试(二)
  9. MyEclipse8.5开发环境配置,SVN插件安装问题(转载)
  10. 点陶极速版《隐私政策》
  11. Arduino白泽四足机器人——matlab逆运动学求解
  12. 使用html制作一个旅游网站
  13. 《Windows办公指南》魔改C:\Windows\System32\drivers\etc\hosts实现一个数据中心
  14. Android入门教程 (一) Android简介和android studio安装
  15. 基于思科模拟器进行子网划分
  16. Windows无法格式化改卷,改卷已脱机, 请尝试首先向改卷分配驱动器号或路径使其联机
  17. css 设置div的宽度根据内容自适应
  18. 文件共享总结中篇-Linux服务器文件共享
  19. 教python的app_Python教学
  20. htc 10 t版最新ruu t-mobile htc 10最新版,可用联通volte 可修复基带丢失

热门文章

  1. 炸!多线程 建议观看带上花生啤酒
  2. 六大畅想与十个提问 今年可能成为中国3G元年
  3. 聚观早报 | 保时捷将于月底挂牌上市;宁德时代首创MTB技术落地
  4. Inkscape绘制梯形和圆角梯形
  5. JS JavaScript中去除数组中重复元素的方法
  6. android自动标齐,自定义FlowLayout,支持多种布局优化--android-flowlayout
  7. mysql联合索引学习
  8. 解决AES解密出现数据被截断的问题
  9. 逆水寒服务器为响应,逆水寒白屏未响应怎么办 逆水寒白屏未响应解决办法
  10. F1工程师研发8年 用脚踩飞上青天