JS排序之冒泡排序详解

 更新时间:2017年04月08日 11:58:48   作者:Blue-Beginner  
这篇文章主要为大家详细介绍了JS冒泡排序的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文为大家分享了JS冒泡排序的具体代码,供大家参考,具体内容如下

说明

时间复杂度指的是一个算法执行所耗费的时间
空间复杂度指运行完一个程序所需内存的大小
稳定指,如果a=b,a在b的前面,排序后a仍然在b的前面
不稳定指,如果a=b,a在b的前面,排序后可能会交换位置

--JS冒泡排序--

原理

依次比较相邻的两个值,如果后面的比前面的小,则将小的元素排到前面。依照这个规则进行多次并且递减的迭代,直到顺序正确。

时间复杂度,空间复杂度,稳定性

  • 平均时间复杂度O(n*n)
  • 最好情况O(n)
  • 最差情况O(n*n)
  • 空间复杂度O(1)
  • 稳定性:稳定

冒泡排序的写法

var examplearr=[8,94,15,88,55,76,21,39];
function sortarr(arr){
  for(i=0;i<arr.length-1;i++){
    for(j=0;j<arr.length-1-i;j++){
      if(arr[j]>arr[j+1]){
        var temp=arr[j];
        arr[j]=arr[j+1];
        arr[j+1]=temp;
      }
    }
  }
  return arr;
}
sortarr(examplearr);
console.log(examplearr);

解析

两个循环

当i=0的时候,里面的循环完整执行,从j=0执行到j=6,这也就是第一遍排序,结果是将最大的数排到了最后,这一遍循环结束后的结果应该是[8,15,88,55,76,21,39,94]

当i=1的时候,里面的循环再次完整执行,由于最大的数已经在最后了,没有必要去比较数组的最后两项,这也是j<arr.length-1-i的巧妙之处,结果是[8,15,55,76,21,39,88,94]

说到这里,规律就清楚了,每次将剩下数组里面最大的一个数排到最后面,当第一个循环执行到最后的时候,也就是i=6,此时,j=0,只需要比较数组的第一和第二项,比较完毕,返回。

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

相关文章

  • js实现定时进度条完成后切换图片

    js实现定时进度条完成后切换图片

    这篇文章主要介绍了js实现定时进度条,进度100%以后可以切换图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • 微信小程序实现登录注册界面

    微信小程序实现登录注册界面

    这篇文章主要为大家详细介绍了微信小程序实现登录注册界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • js纯数字逐一停止显示效果的实现代码

    js纯数字逐一停止显示效果的实现代码

    下面小编就为大家带来一篇js纯数字逐一停止显示效果的实现代码。小编觉得非常不错。现在分享给大家。给大家一个参考
    2016-03-03
  • 详解JavaScript原型与原型链

    详解JavaScript原型与原型链

    这篇文章主要介绍了JavaScript原型与原型链的相关资料,帮助大家更好的理解和学习JavaScript,感兴趣的朋友可以了解下
    2020-11-11
  • [JS源码]超长文章自动分页(客户端版)

    [JS源码]超长文章自动分页(客户端版)

    [JS源码]超长文章自动分页(客户端版)...
    2007-01-01
  • 微信小程序实现上传图片的功能

    微信小程序实现上传图片的功能

    这篇文章主要为大家详细介绍了微信小程序实现上传图片的功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • JavaScript 自定义对象方法汇总

    JavaScript 自定义对象方法汇总

    这篇文章主要介绍了JavaScript 自定义对象,主要介绍一些方法object创建对象、使用构造函数创建对象、字面量创建对象、等展开话题,具有一定的参考价值,需要的小伙伴可以参考一下
    2021-12-12
  • JavaScript日期和时间的格式化及其它常用处理方法

    JavaScript日期和时间的格式化及其它常用处理方法

    这篇文章主要给大家介绍了关于JavaScript日期和时间的格式化及其它常用处理方法,JavaScript中可以使用Date对象来表示日期和时间,如果需要格式化日期和时间,可以使用Date对象的几个方法和一些字符串操作方法来实现,需要的朋友可以参考下
    2023-09-09
  • 微信小程序左滑删除功能开发案例详解

    微信小程序左滑删除功能开发案例详解

    这篇文章主要介绍了微信小程序左滑删除功能开发案例详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • JavaScript判断用户名和密码不能为空的实现代码

    JavaScript判断用户名和密码不能为空的实现代码

    下面小编就为大家带来一篇JavaScript判断用户名和密码不能为空的实现代码。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧
    2016-05-05

最新评论