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 相关文章推荐
doctype后如何获得body.clientHeight的方法
Jul 11 Javascript
关于include标签导致js路径找不到的问题分析及解决
Jul 09 Javascript
Javascript合并表格中具有相同内容单元格示例
Aug 11 Javascript
js实现浏览本地文件并显示扩展名的方法
Aug 17 Javascript
非常实用的12个jquery代码片段
Nov 02 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 Javascript
JavaScript动态生成二维码图片
Apr 20 Javascript
Node.js connect ECONNREFUSED错误解决办法
Sep 15 Javascript
JS实现的点击表头排序功能示例
Mar 27 Javascript
layui实现动态和静态分页
Apr 28 Javascript
微信小程序适配iphoneX的实现方法
Sep 18 Javascript
Javascript使用integrity属性进行安全验证
Nov 07 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程序--记数器
2006/10/09 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
2010/07/22 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
AngularJS实现Model缓存的方式
2016/02/03 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
2017/10/26 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
2019/10/23 Javascript
js实现橱窗展示效果
2020/01/11 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
Python中使用HTMLParser解析html实例
2015/02/08 Python
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
python实现合并两个排序的链表
2019/03/03 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
python关闭占用端口方式
2019/12/17 Python
python实现ftp文件传输功能
2020/03/20 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
夏威夷咖啡公司:Hawaii Coffee Company
2019/09/19 全球购物
周年庆促销方案
2014/03/15 职场文书
个人务虚会发言材料
2014/10/20 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
学习经验交流会总结
2015/11/02 职场文书
创业计划书之旅游网站
2019/09/06 职场文书