JavaScript实现经典排序算法之冒泡排序


Posted in Javascript onDecember 28, 2016

冒泡排序可谓是最经典的排序算法了,它是基于比较的排序算法,时间复杂度为O(n^2),其优点是实现简单,n较小时性能较好。

1)算法原理
       相邻的数据进行两两比较,小数放在前面,大数放在后面,这样一趟下来,最小的数就被排在了第一位,第二趟也是如此,如此类推,直到所有的数据排序完成。

2)算法描述
       <1>比较相邻的元素。如果第一个比第二个大,就交换它们两个;
       <2>对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
       <3>针对所有的元素重复以上的步骤,除了最后一个;
       <4>重复步骤1~3,直到排序完成。
3)javascript代码实现

function bubbleSort(arr){  
  var len = arr.length;  
  for (var i = 0; i < len; i++) {  
    for(var j = 0; j < len - i -1; j++){  
      if(arr[j]>arr[j+1]){ //相邻元素进行对比  
        var temp = arr[j+1];//交换元素  
        arr[j+1] = arr[j];  
        arr[j] = temp;  
      }  
    }  
  }  
  return arr;//返回数组  
}  
  
var arr=[1,45,37,5,48,15,37,26,29,2,46,4,17,50,52];//调用排序算法  
console.log(bubbleSort(arr));//控制台输出结果

        这个算法是最基本的实现方法,接着进行改进这个算法,通过设置一个标志性的变量position,用于记录每趟排序中最后一次进行交换的位置。因为position位置之后的记录都已经排序好了,所以进行下一趟排序时只需要扫描到position的位置就好。
改进之后的算法如下:

function bubbleSort2(arr){  
  var i = arr.length -1;//开始时,扫描的最后位置  
  while(i>0){  
    var position = 0;//标志性变量,表示当前排序中交换的位置  
    for(var j = 0; j < i; j ++){  
      if(arr[j]>arr[j+1]){  
        position = j;  
        var temp = arr[j+1];  
        arr[j+1] = arr[j];  
        arr[j] = temp;  
      }  
    }  
    i = position;  
  }  
  return arr;  
}  
  
var arr=[1,45,37,5,48,15,37,26,29,2,46,4,17,50,52];  
console.log(bubbleSort2(arr));

      传统冒泡排序中每一趟排序操作只能找到一个最大值或最小值,我们考虑利用在每趟排序中进行正向和反向两遍冒泡的方法一次可以得到两个最终值(最大者和最小者) , 从而使排序趟数几乎减少了一半。
改进之后的算法如下:

function bubbleSort3(arr){  
  var low = 0;  
  var high = arr.length-1;  
  var temp;  
  while(low < high){//找到最大值  
    for(var j = low ; j < high ; j++){  
      if (arr[j]> arr[j+1]) {       
        temp = arr[j+1];  
        arr[j+1] = arr[j];  
        arr[j] = temp;  
       }  
    }  
    --high;//修改high值,向前移一位  
  }  
  while(low > high){//找到最小值  
    for(var j = high ;j > low; j--){  
      if (arr[j]> arr[j+1]) {       
        temp = arr[j+1];  
        arr[j+1] = arr[j];  
        arr[j] = temp;  
       }  
    }  
    ++low;//修改low值,往后移动一位  
  }  
  return arr;  
}  
var arr=[1,45,37,5,48,15,37,26,29,2,46,4,17,50,52];  
console.log(bubbleSort3(arr));

4)算法分析

      最佳情况:T(n) = O(n)
      最差情况:T(n) = O(n2)
      平均情况:T(n) = O(n2)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript获取form里的表单元素的示例代码
Feb 14 Javascript
jquery实现相册一下滑动两次的方法
Feb 09 Javascript
微信小程序 设置启动页面的两种方法
Mar 09 Javascript
js指定步长实现单方向匀速运动
Jul 17 Javascript
layui中layer前端组件实现图片显示功能的方法分析
Oct 13 Javascript
聊聊JS动画库 Velocity.js的使用
Mar 13 Javascript
js Element Traversal规范中的元素遍历方法
Apr 19 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
Aug 31 Javascript
微信小程序ibeacon三点定位详解
Oct 31 Javascript
使用layui定义一个模块并使用的例子
Sep 14 Javascript
使用axios请求时,发送formData请求的示例
Oct 29 Javascript
js实现简单点赞操作
Mar 17 Javascript
BootStrap Tooltip插件源码解析
Dec 27 #Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
Dec 27 #Javascript
javascript实现文字无缝滚动
Dec 27 #Javascript
JavaScript仿聊天室聊天记录
Dec 27 #Javascript
基于jQuery实现顶部导航栏功能
Dec 27 #Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
Dec 27 #Javascript
基于jQuery实现左侧菜单栏可折叠功能
Dec 27 #Javascript
You might like
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
php socket通信简单实现
2016/11/18 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
js轮播图代码分享
2016/07/14 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
python实现问号表达式(?)的方法
2013/11/27 Python
在Django框架中设置语言偏好的教程
2015/07/27 Python
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
临床医学大学生求职信
2013/09/28 职场文书
普通院校学生的自荐信
2013/11/27 职场文书
医院办公室主任职责
2013/12/29 职场文书
手机银行营销方案
2014/03/14 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
带病坚持工作事迹
2014/05/03 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis
JAVA springCloud项目搭建流程
2022/05/11 Java/Android