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 24 Javascript
原生js操作checkbox用document.getElementById实现
Oct 12 Javascript
关于JS变量和作用域详解
Jul 28 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
Jul 27 Javascript
JS删除数组里的某个元素方法
Feb 03 Javascript
JS实现DOM删除节点操作示例
Apr 04 Javascript
深入理解JS的事件绑定、事件流模型
May 13 Javascript
详解搭建es6+devServer简单开发环境
Sep 25 Javascript
layui中的switch开关实现方法
Sep 03 Javascript
vue跳转方式(打开新页面)及传参操作示例
Jan 26 Javascript
基于JavaScript实现留言板功能
Mar 16 Javascript
js实现筛选功能
Nov 24 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验证码生成类分享
2014/08/21 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
2014/10/14 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
Prototype使用指南之array.js
2007/01/10 Javascript
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
django迁移数据库错误问题解决
2019/07/29 Python
python标准库os库的函数介绍
2020/02/12 Python
python 带时区的日期格式化操作
2020/10/23 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
python实现猜拳游戏项目
2020/11/30 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
HTML5进阶段内联标签汇总(小篇)
2016/07/13 HTML / CSS
美国批发零售网站:GearXS
2016/07/26 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
澳大利亚商务邀请函
2014/01/17 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
python计算列表元素与乘积详情
2022/08/05 Python