JS实现的冒泡排序,快速排序,插入排序算法示例


Posted in Javascript onMarch 02, 2019

本文实例讲述了JS实现的冒泡排序,快速排序,插入排序算法。分享给大家供大家参考,具体如下:

一、冒泡排序

大致分两步:

1、依次对比相邻2个数字,前者比后者大就调换位置

2、重复第一步操作,直到所有数字都按顺序排列

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

二、快速排序

大致分三步:

1、找基准(一般是以中间项为基准)
2、遍历数组,小于基准的放在left,大于基准的放在right
3、递归

function quickSort(arr){
   //如果数组<=1,则直接返回
   if(arr.length<=1){return arr;}
   var pivotIndex=Math.floor(arr.length/2);
   //找基准,并把基准从原数组删除
   var pivot=arr.splice(pivotIndex,1)[0];
   //定义左右数组
   var left=[], right=[];
   //比基准小的放在left,比基准大的放在right
   for(var i=0;i<arr.length;i++){
    if(arr[i]<=pivot){
     left.push(arr[i]);
    }else{
     right.push(arr[i]);
    }
   }
   //递归
   return quickSort(left).concat(pivot, quickSort(right));
}

三、插入排序(对于少量元素比较有效)

原理:像排序一手扑克牌,开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的

位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较,如图2-1所示。拿在左手上的牌总是排序好的,原来这些牌是桌子上牌堆中顶部的牌。

手上的牌是有序数列,桌子上的牌是无序数列。

JS实现的冒泡排序,快速排序,插入排序算法示例

function insertSort(arr){
  //从第二个数开始,依次插入
  for(var i=1; i<arr.length; i++){
   //判断目标元素是否小于前一个元素
   if(arr[i]<arr[i-1]){
    var current=arr[i];
    var j=i-1;
    //从有序数列从后往前对比,如果目标元素小于与之对比的当前元素,当前元素位置往后挪一位
    while(j>=0 && current<arr[j]) {
     arr[j+1]=arr[j];
     j--;
    }
    //插入
    arr[j+1]=current;
   }
  }
  return arr;
}

插入排序另一种写法(个人感觉还是这种效率快)

function insertSort(arr) {
  for(let i=1; i<arr.length; i++) {
    if(arr[i] < arr[0]) {
      arr.unshift(arr.splice(i,1)[0]);
    }else {
      for(let j=i-1; j>=0; j--) {
        if(arr[i] > arr[j]) {
          let current = arr.splice(i,1)[0];
          arr.splice(j+1,0,current);
          break;
        }
      }
    }
  }
  return arr;
}

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

Javascript 相关文章推荐
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
Dec 08 Javascript
js仿百度有啊通栏展示效果实现代码
May 28 Javascript
jquery mobile changepage的三种传参方法介绍
Sep 13 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
Jun 17 Javascript
谈一谈JS消息机制和事件机制的理解
Apr 14 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
Nov 07 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
Dec 08 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
Jan 13 Javascript
js实现常见的工具条效果
Mar 02 Javascript
angularJS开发注意事项
May 26 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
Sep 28 Javascript
详解vue如何使用rules对表单字段进行校验
Oct 17 Javascript
JS+php后台实现文件上传功能详解
Mar 02 #Javascript
JS事件绑定的常用方式实例总结
Mar 02 #Javascript
JS实现获取数组中最大值或最小值功能示例
Mar 02 #Javascript
JS使用队列对数组排列,基数排序算法示例
Mar 02 #Javascript
VUE引入第三方js包及调用方法讲解
Mar 01 #Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
Mar 01 #Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
Mar 01 #Javascript
You might like
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
javascript 事件处理、鼠标拖动效果实现方法详解
2012/05/11 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
express.js中间件说明详解
2019/03/19 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
使用Python绘制图表大全总结
2017/02/11 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
浅析Python 责任链设计模式
2020/09/11 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
耐克美国官网:Nike.com
2016/08/01 全球购物
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
自荐书4要点
2014/01/25 职场文书
党员批评与自我批评
2014/02/12 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
2014年母亲节寄语
2014/05/07 职场文书
公司岗位说明书
2015/10/08 职场文书
纪检部部长竞选稿
2015/11/21 职场文书