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 相关文章推荐
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
Mar 07 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
May 02 Javascript
JavaScript伸缩的菜单简单示例
Dec 03 Javascript
js格式化金额可选是否带千分位以及保留精度
Jan 28 Javascript
JavaScript Math 对象常用方法总结
Apr 28 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
Feb 05 Javascript
提高Web性能的前端优化技巧总结
Feb 27 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
Jun 12 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
May 03 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
Oct 10 jQuery
Vue 列表页带参数进详情页的操作(router-link)
Nov 13 Javascript
vue组件中传值EventBus的使用及注意事项说明
Nov 16 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
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
php批量删除操作代码分享
2017/02/26 PHP
JS中剪贴板兼容性、判断复制成功或失败
2021/03/09 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
python定时器使用示例分享
2014/02/16 Python
Python实现比较两个列表(list)范围
2015/06/12 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
Python sys模块常用方法解析
2020/02/20 Python
Python super()方法原理详解
2020/03/31 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
物流管理专业应届生求职信
2013/11/21 职场文书
土木工程师岗位职责
2013/11/24 职场文书
诚信考试倡议书
2014/04/15 职场文书
分公司任命书
2014/06/06 职场文书
爱护公共设施标语
2014/06/24 职场文书
政协会议宣传标语
2014/10/09 职场文书
起诉书格式范文
2015/05/20 职场文书
报案材料怎么写
2015/05/25 职场文书
青年联谊会致辞
2015/07/31 职场文书