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 相关文章推荐
细品javascript 寻址,闭包,对象模型和相关问题
Apr 27 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
Apr 02 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
Feb 27 Javascript
JQuery分屏指示器图片轮换效果实例
May 21 Javascript
Node.js下自定义错误类型详解
Oct 17 Javascript
JSP防止网页刷新重复提交数据的几种方法
Nov 19 Javascript
JS实现的样式切换功能tableCSS实例
Dec 30 Javascript
Vue的路由动态重定向和导航守卫实例
Mar 17 Javascript
React Hooks的深入理解与使用
Nov 12 Javascript
微信小程序实现省市区三级地址选择
Jun 21 Javascript
JavaScript使用面向对象实现的拖拽功能详解
Jun 12 Javascript
layui的layedit富文本赋值方法
Sep 18 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
PHP如何透过ODBC来存取数据库
2006/10/09 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
比较完整的微信开发php代码
2016/08/02 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
vue webpack重写cookie路径的方法
2019/07/10 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
python append、extend与insert的区别
2016/10/13 Python
python Tkinter版学生管理系统
2019/02/20 Python
python验证身份证信息实例代码
2019/05/06 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
通过实例学习Python Excel操作
2020/01/06 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
家得宝墨西哥官网:The Home Depot墨西哥
2019/11/18 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
安全员岗位职责
2013/11/11 职场文书
客户表扬信范文
2014/01/10 职场文书
端午节演讲稿
2014/05/23 职场文书
树转促学习心得体会
2014/09/10 职场文书
简易离婚协议书范本
2014/10/24 职场文书
2014年加油站工作总结
2014/12/04 职场文书
2015年外联部工作总结
2015/04/03 职场文书
篮球赛新闻稿
2015/07/17 职场文书
校园之声广播稿
2015/08/18 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android