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 相关文章推荐
关于Blog顶部的滚动导航条代码
Sep 25 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
Dec 15 Javascript
鼠标滚轮控制网页横向移动实现思路
Mar 22 Javascript
extjs4 treepanel动态改变行高度示例
Dec 17 Javascript
jQuery实现弹出窗口中切换登录与注册表单
Jun 05 Javascript
让编辑器支持word复制黏贴、截屏的js代码
Oct 17 Javascript
vue 注册组件的使用详解
May 05 Javascript
实例讲解vue源码架构
Jan 24 Javascript
Vue项目引发的「过滤器」使用教程
Mar 12 Javascript
深入理解 TypeScript Reflect Metadata
Dec 12 Javascript
jQuery+ThinkPHP实现图片上传
Jul 23 jQuery
在elementui中Notification组件添加点击事件实例
Nov 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
PHP调用Webservice实例代码
2011/07/29 PHP
PHP chop()函数讲解
2019/02/11 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
2015/11/02 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
VUE项目初建和常见问题总结
2019/09/12 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
Python3读取zip文件信息的方法
2015/05/22 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
python实现三维拟合的方法
2018/12/29 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
PyTorch安装与基本使用详解
2020/08/31 Python
python实现简单猜单词游戏
2020/12/24 Python
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
大学生村官事迹材料
2014/01/21 职场文书
劲霸男装广告词
2014/03/21 职场文书
营销学习心得体会
2014/09/12 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
新闻发布会新闻稿
2015/07/17 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
利用python做数据拟合详情
2021/11/17 Python