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 相关文章推荐
js实现杯子倒水问题自动求解程序
Mar 25 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
Apr 27 Javascript
jQuery实现表头固定效果的实例代码
May 24 Javascript
javascript验证只能输入数字和一个小数点示例
Oct 21 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
Sep 21 Javascript
在JavaScript中使用对数Math.log()方法的教程
Jun 15 Javascript
jQuery获取URL请求参数的方法
Jul 18 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 Javascript
浅析JS运动
Dec 28 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
Jan 06 Javascript
AngularJs ng-route路由详解及实例代码
Sep 14 Javascript
新闻上下滚动jquery 超简洁(必看篇)
Jan 21 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
PHP中用正则表达式清除字符串的空白
2011/01/17 PHP
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
图片之间的切换
2006/06/26 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
python三大神器之fabric使用教程
2019/06/10 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
环境工程专业个人求职信
2013/12/05 职场文书
考核工作实施方案
2014/03/30 职场文书
五四青年节演讲稿
2014/05/26 职场文书
小学班级口号
2014/06/09 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
用电申请报告范文
2015/05/18 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
三十年同学聚会感言
2015/07/30 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
JavaScript文档对象模型DOM
2021/11/20 Javascript