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 Eval 函数使用
Mar 23 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
Jul 18 Javascript
js编写trim()函数及正则表达式的运用
Oct 24 Javascript
对new functionName()定义一个函数的理解
May 22 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
Mar 24 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
Apr 25 Javascript
jquery移动点击的项目到列表最顶端的方法
Jun 24 Javascript
jquery合并表格中相同文本的相邻单元格
Jul 17 Javascript
JavaScript取得键盘按下方向键是哪个的方法
Aug 04 Javascript
js仿网易表单及时验证功能
Mar 07 Javascript
Vuex的热更替如何实现
Jun 05 Javascript
JS实现鼠标移动拖尾
Dec 27 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实现手机归属地查询API接口实现代码
2012/08/27 PHP
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
jQuery实现的调整表格行tr上下顺序
2016/01/10 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
2017/08/25 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
Python批量更改文件名的实现方法
2017/10/29 Python
python删除服务器文件代码示例
2018/02/09 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
用python3 返回鼠标位置的实现方法(带界面)
2019/07/05 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
使用pytorch实现可视化中间层的结果
2019/12/30 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
python属于解释型语言么
2020/06/15 Python
大学生实习思想汇报
2014/01/12 职场文书
加多宝凉茶广告词
2014/03/18 职场文书
毕业生欢送会主持词
2014/03/31 职场文书
个人委托书
2014/07/31 职场文书
共青团员自我评价范文
2014/09/14 职场文书