javascript数据结构与算法 --- 基本排序算法

news/2025/2/12 18:03:15

基本排序算法总结

前言

随着node的兴起, 将javascript推向的一个前所未有的高度, node作为为建立高性能的服务端而创建的js运行平台随着时间的推移和生态链的完善已经不再局部于服务端,包括前端,后端,桌面,这篇文章介绍的传统的散打排序方法,并用javascript实现其功能,如有需要可以对其封装,在随后会介绍高级排序算法---(希尔排序,归并排序,快速排序),下面给出链接

高级排序算法 https://segmentfault.com


  1. 冒泡排序

    冒泡排序是最常见的一种排序方法,他采用类似于逐轮沉淀的方法每次找到队列中的最大值并放置与最后, 在每轮中使前一个元素与后一个元素比较,如果前者与后者就交换次序,如下图所示.

    图片描述

        function bubbleSort(array) {for (let i = 0; i < array.length-1; i++) {for (let j = 0; j < array.length-1-i ; j++) {if (array[j] > array[j+1]) {//1. es6[array[j+1], array[j]] = [array[j], array[j+1]];} }}return array;}
    1 可以采用es6最新的解构语法交换数据[array[j+1], array[j]] = [array[j], array[j+1]];
    2 为引入变量的交换 array[j] = array[j] + array[j+1];array[j+1] =  array[j] - array[j+1];array[j] =  array[j] - array[j+1];
  2. 选择排序

        function selectionSort(array) {for (let i = 0; i < array.length - 1; i++) {for (let j = i+1; j < array.length; j++) {if (array[i] > array[j]) {// es6[array[j], array[i]] = [array[i], array[j]];} }     }return array }
  3. 插入排序

        function insertionSort(array) {for (let i = 1; i < array.length; i++) {let temp = array[i];let j = 0;for (j = i - 1; (j >= 0) && (temp < array[j]); j--) {array[j + 1] = array[j];  }array[j + 1] = temp;console.log(array);}return array;}

实验对比

  1. 创建随机生成数组:

        let CArray = (function(params) {function CArray(numElements) {this.dataStore = [];this.pos = 0;this.numElements = numElements;this.insert = insert;this.toString = toString;this.clear = clear;this.setData = setData;this.swap = swap;for (var i = 0; i < numElements; ++i) {this.dataStore[i] = i;}}function setData() {for (var i = 0; i < this.numElements; ++i) {this.dataStore[i] = Math.floor(Math.random() * (this.numElements+1));}}function clear() {for (var i = 0; i < this.dataStore.length; ++i) {this.dataStore[i] = 0;}}function insert(element) {this.dataStore[this.pos++] = element;}function toString() {var retstr = "";for (var i = 0; i < this.dataStore.length; ++i) {retstr += this.dataStore[i] + " ";if (i > 0 && i % 10 == 0) {retstr += "\n";}}return retstr;}function swap(arr, index1, index2) {var temp = arr[index1];arr[index1] = arr[index2];arr[index2] = temp;}return CArray;  })()
  2. 结论:

        var numElements = 10000;var myNums = new CArray(numElements);myNums.setData();var start = new Date().getTime();bubbleSort(myNums.dataStore).toString()var stop = new Date().getTime();var between = stop - start;console.log('冒泡排序执行时间:' + between);start = new Date().getTime();selectionSort(myNums.dataStore).toString()stop = new Date().getTime();between = stop - start;console.log('选择排序执行时间:' + between);start = new Date().getTime();insertionSort(myNums.dataStore).toString()stop = new Date().getTime();between = stop - start;console.log('插入排序执行时间:' + between);console.log(new Date().getTime());

    图片描述

    可知对于执行效率: 选择排序 > 插入排序要 > 冒泡
    排序快,插入排序是这三种算法中最快的



https://dhexx.cn/news/show-3007783.html

相关文章

Django——支付宝支付功能

前期准备 首先我们需要获得支付宝提供的权限与接口&#xff0c;在蚂蚁开放平台进行相关申请&#xff1a;https://openhome.alipay.com/platform/appDaily.htm?tabinfo 申请支付宝账户权限 创建应用 沙箱测试环境 appID&#xff1a;我的身份 支付宝网关&#xff1a;测试环境 获…

qmc3格式文件转为mp3

1.直接将工具放到歌曲所在文件夹&#xff0c;双击“qmctomp3.exe”即可自动开始转换。 程序为无损转换&#xff0c;结果保存在“new_mp3”文件夹中 软件下载&#xff1a;https://download.csdn.net/download/pgking1688/11282428

ArrayList add方法的实现之扩容

初探ArrayList的1.5倍扩容 add方法是通过在list的尾部追加元素的方法&#xff0c;添加数据的。 其中&#xff0c;调用了一个叫ensureCapacityInternal方法&#xff0c;实现list的容量换算等&#xff1a; 注意&#xff1a;参数传的是当前需要的最小的容量&#xff0c;方法首先确…

[HNOI2006] 鬼谷子的钱袋

欧拉函数 传送门&#xff1a;$>here<$ 题意&#xff1a;求最少将$n$分解成几个数&#xff0c;使得他们能组合出$n$以内的所有数。并且需要满足只有数值$1$能够重复。 数据范围&#xff1a;$n \leq 1e9$ $Solution$ 如果没有"只有1能重复"这个条件&#xff0c;那…

淘宝虚拟商品自动发货安装包及使用教程

正版软件淘宝虚拟产品自动发货软件 免费 自动发货开店必备 软件都是正版软件 保证百分百正版软件保证永远免费 最重要都是永远免费都是正版软件 下载地址&#xff1a;https://download.csdn.net/download/pgking1688/11456817

NW.js 简介与使用

简介&#xff08;1&#xff09;以网络最流行的技术编写原生应用程序的新方法&#xff08;2&#xff09;基于HTML5, CSS3, JS and WebGL而编写&#xff08;3&#xff09;完全支持nodejs所有api及第三方模块&#xff08;4&#xff09;可以使用DOM直接调用nodejs模块&#xff08;5…

自己用过最好用的pdf转word软件

办公中很多时候用到pdf转word&#xff0c;能省很多事&#xff0c;前几年找了好久在网上找到了这款软件&#xff0c;带激活邮箱和注册码&#xff0c;无限制使用&#xff0c;无广告&#xff0c;还很小巧只有5M&#xff0c;推荐给大家。 软件下载地址&#xff1a; https://downloa…

2018-2019-1 20189221 《构建之法》第 2 周学习总结

2018-2019-1 20189221 《构建之法》第 2 周学习总结 第 2 章 个人技术和流程 单元测试 单元测试应该准确、快速地保证程序基本模块的正确性。标准&#xff1a;单元测试应该在最基本的功能/参数上验证程序的正确性。 单元测试应该测试程序中最基本的单元—如在C/C#/Java中的类&a…

Docker系列课程01-Docker简介

原文&#xff1a;http://www.itmuch.com/docker/01-docker-summary/ 1.1 Docker简介 Docker是一个开源的容器引擎&#xff0c;它可以帮助我们更快地交付应用。Docker可将应用程序和基础设施层隔离&#xff0c;并且能将基础设施当作程序一样进行管理。使用Docker&#xff0c;可更…

如何解决微信与此ipad不兼容

如何解决微信与此ipad不兼容 如何解决微信与此ipad mini不兼容 尝试过很多方法&#xff0c;用pp助手和爱思助手安装以前版本 都不行&#xff0c;显示版本过低&#xff0c;需要升级&#xff0c; 但一升级&#xff0c;显示不兼容。 折磨了十分钟后&#xff0c; 最后这个方法搞定…