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的常规数组和关联数组对比小结
May 24 Javascript
JavaScript基本语法讲解
Jun 03 Javascript
jquery验证邮箱格式并显示提交按钮
Nov 07 Javascript
利用JS生成博文目录及CSS定制博客
Feb 10 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
Dec 11 Javascript
javascript 通过键名获取键盘的keyCode方法
Dec 31 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
Apr 18 jQuery
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
May 22 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
Sep 23 Javascript
js+html实现点名系统功能
Nov 05 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
Nov 05 Javascript
JS实现九宫格拼图游戏
Jun 28 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
用libTemplate实现静态网页的生成
2006/10/09 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
取得传值的函数
2006/10/27 Javascript
js一组验证函数
2008/12/20 Javascript
javascript EXCEL 操作类代码
2009/07/30 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
json中换行符的处理方法示例介绍
2014/06/10 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
js+css实现扇形导航效果
2020/08/18 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
Python中的各种装饰器详解
2015/04/11 Python
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
python sqlite的Row对象操作示例
2019/09/11 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
自考生毕业自我鉴定
2013/10/10 职场文书
法律工作求职自荐信
2013/10/31 职场文书
早读迟到检讨书
2014/01/24 职场文书
家长给孩子的评语
2014/01/30 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
文艺委员竞选稿
2015/11/19 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
MySQL8.0.18配置多主一从
2021/06/21 MySQL
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS