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 相关文章推荐
ExtJS扩展 垂直tabLayout实现代码
Jun 21 Javascript
javascript sudoku 数独智力游戏生成代码
Mar 27 Javascript
javascript拖拽上传类库DropzoneJS使用方法
Dec 05 Javascript
jQuery中 prop() attr()使用详解
May 19 Javascript
vuex操作state对象的实例代码
Apr 25 Javascript
vue组件(全局,局部,动态加载组件)
Sep 02 Javascript
微信小程序实现留言功能
Oct 31 Javascript
vue中axios请求的封装实例代码
Mar 23 Javascript
javascript实现小型区块链功能
Apr 03 Javascript
IE11下处理Promise及Vue的单项数据流问题
Jul 24 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
May 19 jQuery
vue组件暴露和.js文件暴露接口操作
Aug 11 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
PHP在Web开发领域的优势
2006/10/09 PHP
php将时间差转换为字符串提示
2011/09/07 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
php格式化金额函数分享
2015/02/02 PHP
php eval函数一句话木马代码
2015/05/21 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
JavaScript 模拟用户单击事件
2009/12/31 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
跟老齐学Python之编写类之二方法
2014/10/11 Python
Python实现控制台输入密码的方法
2015/05/29 Python
详细分析python3的reduce函数
2017/12/05 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
一道Delphi面试题
2016/10/28 面试题
写给妈妈的道歉信
2014/01/11 职场文书
委托书模板
2014/04/04 职场文书
营运督导岗位职责
2015/04/10 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang