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 控制 html元素 显示/隐藏实现代码
Sep 01 Javascript
jquery中$.post()方法的简单实例
Feb 04 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
Jan 22 Javascript
js判断数组key是否存在(不用循环)的简单实例
Aug 03 Javascript
jQuery多选框选择数量限制方法
Feb 08 Javascript
JavaScript队列的应用实例详解【经典数据结构】
Apr 12 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
Jan 11 Javascript
vuejs实现折叠面板展开收缩动画效果
Sep 06 Javascript
JSON的parse()方法介绍
Jan 31 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
Apr 23 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
微信小程序实现录音功能
Nov 22 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 程序员的调试技术小结
2009/11/15 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
详解PHP错误日志的获取方法
2015/07/20 PHP
PHP书写格式详解(必看)
2016/05/23 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
Javascript 面向对象特性
2009/12/28 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
详解Vue中状态管理Vuex
2017/05/11 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
2017/10/17 Javascript
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
JavaScript的一些小技巧分享
2021/01/06 Javascript
[01:54]胎教DOTA2 准妈妈玩家现身中国区预选赛
2016/06/26 DOTA
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
九州传奇上机题
2014/07/10 面试题
仓库管理专业个人的自我评价
2013/12/30 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
上班看电影检讨书
2014/02/12 职场文书
防汛工作情况汇报
2014/10/28 职场文书
停电通知范文
2015/04/16 职场文书
债务追讨律师函
2015/06/24 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript