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 延迟加载技术(lazyload)简单实现
Jan 17 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
Jul 31 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
Jan 08 Javascript
使用node+vue.js实现SPA应用
Jan 28 Javascript
jquery通过name属性取值的简单实现方法
Jun 20 Javascript
浅谈Javascript中的函数、this以及原型
Oct 09 Javascript
AngularJS入门示例之Hello World详解
Jan 04 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
Feb 22 Javascript
一个简易的js图片轮播效果
Jul 22 Javascript
laydate时间日历插件使用方法详解
Nov 14 Javascript
element-ui 中使用upload多文件上传只请求一次接口
Jul 19 Javascript
vue调用语音播放的方法
Sep 27 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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
JAVA/JSP学习系列之六
2006/10/09 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
2011/11/07 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
PHP中把对象数组转换成普通数组的方法
2015/07/10 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
PHP脚本自动识别验证码查询汽车违章
2016/12/20 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码
2016/12/27 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
javascript编程开发中取色器及封装$函数用法示例
2017/08/09 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
跟老齐学Python之用Python计算
2014/09/12 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
干部现实表现材料
2014/02/13 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
高三生物教学反思
2016/02/22 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
解析Redis Cluster原理
2021/06/21 Redis
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python