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 容错处理代码, 屏蔽错误信息
Mar 09 Javascript
jQuery页面滚动浮动层智能定位实例代码
Aug 23 Javascript
js移除事件 js绑定事件实例应用
Nov 28 Javascript
在javascript中关于节点内容加强
Apr 11 Javascript
Function.prototype.bind用法示例
Sep 16 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
Jun 10 Javascript
字段太多jquey快速清空表单内容方法
Aug 21 Javascript
js+css实现tab菜单切换效果的方法
Jan 20 Javascript
[js高手之路]寄生组合式继承的优势详解
Aug 28 Javascript
基于JavaScript实现十五拼图代码实例
Apr 26 Javascript
vue用elementui写form表单时,在label里添加空格操作
Aug 13 Javascript
vue-cropper组件实现图片切割上传
May 27 Vue.js
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
用libtemplate实现静态网页生成
2006/10/09 PHP
PHP远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
php实现点击可刷新验证码
2015/11/07 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
jquery制作图片时钟特效
2020/03/30 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
详解JS预解析原理
2020/06/16 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
python实现的简单文本类游戏实例
2015/04/28 Python
Python中文字符串截取问题
2015/06/15 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
英国女装网上商店:I Saw It First
2018/10/18 全球购物
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
出纳员岗位职责
2014/03/13 职场文书
实习生评语
2014/04/26 职场文书
会计专业自荐书
2014/07/08 职场文书
2014国庆黄金周超市促销活动方案
2014/09/21 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
运动会通讯稿50字
2015/07/20 职场文书
高一军训感想
2015/08/07 职场文书
教师远程研修感悟
2015/11/18 职场文书
2019最新激励员工口号大全!
2019/06/28 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书
教你利用Selenium+python自动化来解决pip使用异常
2021/05/20 Python