js基本算法:冒泡排序,二分查找的简单实例


Posted in Javascript onOctober 08, 2016

知识扩充:

时间复杂度:算法的时间复杂度是一个函数,描述了算法的运行时间。时间复杂度越低,效率越高。

自我理解:一个算法,运行了几次时间复杂度就为多少,如运行了n次,则时间复杂度为O(n)。

1.冒泡排序

解析:1.比较相邻的两个元素,如果前一个比后一个大,则交换位置。

2.第一轮的时候最后一个元素应该是最大的一个。

3.按照步骤一的方法进行相邻两个元素的比较,这个时候由于最后一个元素已经是最大的了,所以最后一个元素不用比较。

function sort(elements){
 for(var i=0;i<elements.length-1;i++){
 for(var j=0;j<elements.length-i-1;j++){
  if(elements[j]>elements[j+1]){
  var swap=elements[j];
  elements[j]=elements[j+1];
  elements[j+1]=swap;
  }
 }
 }
}
 
var elements = [3, 1, 5, 7, 2, 4, 9, 6, 10, 8];
console.log('before: ' + elements);
sort(elements);
console.log(' after: ' + elements);

2.快速排序

解析:快速排序是对冒泡排序的一种改进,第一趟排序时将数据分成两部分,一部分比另一部分的所有数据都要小。然后递归调用,在两边都实行快速排序。

function quickSort(elements) {
 
if (elements.length <= 1) { return elements; }
 
  var pivotIndex = Math.floor(elements.length / 2);
 
  var pivot = elements.splice(pivotIndex, 1)[0];
 
 

var left = [];
 

var right = [];
 

for (var i = 0; i < elements.length; i++){
 


if (elements[i] < pivot) {
 



left.push(elements[i]);
 


} else {
 



right.push(elements[i]);
 


}
 

}
 

return quickSort(left).concat([pivot], quickSort(right));
 
};
 
var elements=[5,6,2,1,3,8,7,1.2,5.5,4.5];
alert(quickSort(elements));

3.插入排序

解析:

(1) 从第一个元素开始,该元素可以认为已经被排序

(2) 取出下一个元素,在已经排序的元素序列中从后向前扫描

(3) 如果该元素(已排序)大于新元素,将该元素移到下一位置

(4) 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

(5)将新元素插入到下一位置中

(6) 重复步骤2

insertSort: function(elements) {

  var i = 1,
  j, step, key, len = elements.length;

  for (; i < len; i++) {

    step = j = i;
    key = elements[j];

    while (--j > -1) {
      if (elements[j] > key) {
        elements[j + 1] = elements[j];
      } else {
        break;
      }
    }

    elements[j + 1] = key;
  }

  return elements;
}

2.二分查找

解析:二分查找,也为折半查找。首先要找到一个中间值,通过与中间值比较,大的放又,小的放在左边。再在两边中寻找中间值,持续以上操作,直到找到所在位置为止。

(1)递归方法

function binarySearch(data,item,start,end){
  var end=end || data.length-1;
  var start=start || 0;
  var m=Math.floor((start+end)/2);
  if(item==data[m]){
    return m;
  }else if(item<data[m]){
    return binarySearch(data,item,start,m-1) //递归调用
  }else{
    return binarySearch(data,item,m+1,end);
  }
  return false;
}

  var arr=[34,12,5,123,2,745,32,4];

  binary(arr,5);

(2)非递归方法

function binarySearch(data, item){
  var h = data.length - 1,
    l = 0;
  while(l <= h){
    var m = Math.floor((h + l) / 2);
    if(data[m] == item){
      return m;
    }
    if(item > data[m]){
      l = m + 1;
    }else{
      h = m - 1;
    }
  }
 
  return false;
}
var arr=[34,12,5,123,2,745,32,4];
binarySearch(arr,5);

以上就是小编为大家带来的js基本算法:冒泡排序,二分查找的简单实例全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
浏览器解析js生成的html出现样式问题的解决方法
Apr 16 Javascript
js 页面元素的几个用法总结
Nov 18 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
Apr 29 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
Mar 01 Javascript
javascript弹出带文字信息的提示框效果
Jul 19 Javascript
jQuery向父辈遍历的简单方法
Sep 18 Javascript
Angular 输入框实现自定义验证功能
Feb 19 Javascript
zTree树形插件异步加载方法详解
Jun 14 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
Nov 09 Javascript
vue脚手架中配置Sass的方法
Jan 04 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
Oct 12 Javascript
JS实现手写 forEach算法示例
Apr 29 Javascript
javascript中获取元素标签中间的内容的实现方法
Oct 08 #Javascript
Jquery和Js获得元素标签名称的方法总结
Oct 08 #Javascript
JS获取html元素的标记名实现方法
Oct 08 #Javascript
js获取元素的标签名实现方法
Oct 08 #Javascript
什么是JavaScript中的结果值?
Oct 08 #Javascript
如何利用模板将HTML从JavaScript中抽离
Oct 08 #Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
Oct 08 #Javascript
You might like
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
Z-Blog中用到的js代码
2007/03/15 Javascript
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
用JS动态改变表单form里的action值属性的两种方法
2016/05/25 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
说出数据连接池的工作机制是什么?
2013/04/19 面试题
Android面试题附答案
2014/12/08 面试题
制作部班长职位说明书
2014/02/26 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
安全教育第一课观后感
2015/06/17 职场文书
公司员工离职感言
2015/08/03 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python