目录

冒泡排序

选择排序

插入排序

快速排序

总结


冒泡排序

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

首先随机生成一个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. 李沐团队新作Gluon,复现CV经典模型到BERT,简单好用 | 强烈推荐
  2. 2018年人工智能13大预测
  3. SSMS2008插件开发(3)--部署调试SSMS2008插件
  4. 161026、更快速将你的页面展示给用户[前端优化篇]
  5. QQ牧场在高速模式下的一些小bug
  6. python 邮件发送附件 本目录下所有文件_为python中的每个txt文件发送附件电子邮件...
  7. 【linux】WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
  8. 存储端显示主机链路降级_【计算机网络】你真的理解数据链路层吗?
  9. leetcode-345-Reverse Vowels of a String
  10. WP7 App性能优化(12):检测应用程序性能(Ⅴ)
  11. QQ邮箱鸡肋存储型XSS漏洞利用
  12. Rust : standford 操作系统课与rust各种指针图
  13. ORL数据集百度网盘
  14. 2021全国大学生电子设计竞赛F题参赛简记
  15. 基本技能 100316
  16. 华为防火墙IPSec虚拟环境配置
  17. [Unity3D]Unity3D游戏开发之自由视角下的角色控制
  18. DTAS尺寸公差分析软件-三维尺寸公差分析软件尺寸链计算软件
  19. g 最新编译器linux,Linux下安装gcc 、g++ 、gfortran编译器
  20. scroll-view 下滑列表加载的使用

热门文章

  1. win10电脑硬盘出现黄三角感叹号的解决方法
  2. 计算机图形学-AABB碰撞检测算法
  3. 如何用CSS画一个三角形?
  4. Java工程师大厂校招总结
  5. 攀岩的基本技巧【整理汇总】
  6. mysql联合索引的使用
  7. python中os.listdir用法
  8. Linux中的mkdir和touch命令
  9. 基于图卷积神经网络的微博疫情情感分析
  10. JavaScript移动端 缩放 位移 touch 事件