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 相关文章推荐
div+css布局的图片连续滚动js实现代码
May 04 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 06 Javascript
jQuery事件绑定.on()简要概述及应用
Feb 07 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
Jan 02 Javascript
JS中操作JSON总结
Dec 06 Javascript
JavaScript实现简单的拖动效果
Jul 02 Javascript
AngularJS基础 ng-keydown 指令简单示例
Aug 02 Javascript
详解vue-router和vue-cli以及组件之间的传值
Jul 04 Javascript
vue组件生命周期详解
Nov 07 Javascript
JS跨域请求的问题解析
Dec 03 Javascript
node使用request请求的方法
Dec 20 Javascript
微信小程序抽奖组件的使用步骤
Jan 11 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
使用PHP socke 向指定页面提交数据
2008/07/23 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
yii中widget的用法
2014/12/03 PHP
PHP 实现类似js中alert() 提示框
2015/03/18 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
javascript框架设计读书笔记之模块加载系统
2014/12/02 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
JS实现的自动打字效果示例
2017/03/10 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
Node.js 路由的实现方法
2019/06/05 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
python内打印变量之%和f的实例
2020/02/19 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
StubHub德国:购买和出售门票
2017/09/06 全球购物
大学校运会广播稿
2014/02/03 职场文书
理财计划书
2014/08/14 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
Java Socket实现多人聊天系统
2021/07/15 Java/Android
pycharm安装深度学习pytorch的d2l包失败问题解决
2022/03/25 Python
python双向链表实例详解
2022/05/25 Python