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 相关文章推荐
JQuery 简便实现页面元素数据验证功能
Mar 24 Javascript
js函数的延迟加载实现代码
Oct 11 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
Dec 16 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
May 22 Javascript
JS获取浏览器语言动态加载JS文件示例代码
Oct 31 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
Jan 22 Javascript
Javascript类型系统之String字符串类型详解
Jun 21 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
Jul 24 Javascript
vue watch自动检测数据变化实时渲染的方法
Jan 16 Javascript
解决vue中对象属性改变视图不更新的问题
Feb 23 Javascript
vue父组件向子组件传递多个数据的实例
Mar 01 Javascript
解析JS在获取当前月的最后一天遇到的坑
Aug 30 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
php修改指定文件后缀的方法
2014/09/11 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
js 分栏效果实现代码
2009/08/29 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
js生成验证码并直接在前端判断
2015/05/15 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
Python中getpass模块无回显输入源码解析
2018/01/11 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
django做form表单的数据验证过程详解
2019/07/26 Python
np.random.seed() 的使用详解
2020/01/14 Python
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
进修护士自我鉴定
2013/10/14 职场文书
行政助理岗位职责
2013/11/10 职场文书
本科生职业生涯规划书范文
2014/01/21 职场文书
领导干部培训感言
2014/01/23 职场文书
学生手册评语
2014/05/05 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
承租经营合作者协议书
2014/10/01 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers