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第二章
Sep 30 Javascript
jquery更换文章内容与改变字体大小代码
Sep 30 Javascript
JS回调函数的应用简单实例
Sep 17 Javascript
JS中处理时间之setUTCMinutes()方法的使用
Jun 12 Javascript
初步认识JavaScript函数库jQuery
Jun 18 Javascript
原生JS:Date对象全面解析
Sep 06 Javascript
Bootstrap DateTime Picker日历控件简单应用
Mar 25 Javascript
AngularJS中的拦截器实例详解
Apr 07 Javascript
详解Layer弹出层样式
Aug 21 Javascript
详解vue添加删除元素的方法
Jun 30 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 Javascript
vuejs简单验证码功能完整示例
Jan 08 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侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
window.onerror()的用法与实例分析
2016/01/27 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
python实现决策树分类
2018/08/30 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
python如何输出反斜杠
2020/06/18 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
.NET面试10题
2014/02/24 面试题
中专毕业生自荐信
2013/11/16 职场文书
解除合同协议书
2014/04/17 职场文书
诚信教育主题班会
2015/08/13 职场文书
2019个人半年工作总结
2019/06/21 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
微信小程序实现拍照和相册选取图片
2021/05/09 Javascript
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏
HttpClient实现文件上传功能
2022/08/14 Java/Android