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 XMLHttpRequest对象全面剖析
Apr 24 Javascript
jquery中ajax学习笔记一
Oct 16 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
May 03 Javascript
js四舍五入数学函数round使用实例
May 09 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
javascript实现checkbox全选的代码
Apr 30 Javascript
纯javascript实现自动发送邮件
Oct 21 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
Jun 13 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
Jan 06 Javascript
VUE中v-model和v-for指令详解
Jun 23 Javascript
vue .sync修饰符的使用详解
Jun 15 Javascript
vue相关配置文件详解及多环境配置详细步骤
May 19 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 巧用数组降低程序的时间复杂度
2010/01/01 PHP
队列在编程中的实际应用(php)
2010/09/04 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
jquery中ajax学习笔记3
2011/10/16 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
Python上传package到Pypi(代码简单)
2016/02/06 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
python 将视频 通过视频帧转换成时间实例
2020/04/23 Python
一文读懂Python 枚举
2020/08/25 Python
教师个人自我评价范文
2014/04/13 职场文书
艾滋病宣传标语
2014/06/25 职场文书
酒店总经理岗位职责范本
2014/08/08 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
个人自荐书怎么写
2015/03/26 职场文书
情人节单身感言
2015/08/03 职场文书
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL