冒泡排序算法(JavaScript实现)

算法流程

比较相邻的元素,如果第一个比第二个大,就交换,从第一对元素开始到最后一对元素做同样的工作,每次都重复以上步骤,当遍历arr.length-1次后,遍历完所有的元素

复杂度

时间复杂度为:O(n^2)

代码实现

代码:

function bubbleSort(arr){
  for(var i = 0; i < arr.length-1; i++){
    for(var j = 0;j < arr.length-i;j++){
      if(arr[j] > arr[j+1]){
        var t = arr[j];
        arr[j] = arr[j+1];
        arr[j+1] = t;
      }
    }
  }
  
  return arr;
}

var arr = [1,4,2,5,3];
bubbleSort(arr); // [1 , 2 , 3 , 4 , 5]
算法优化

当待排序数组为[1, 3, 4, 5, 6, 7, 8, 9, 2]时:
第1趟排序的结果为: 1 2 3 4 5 6 7 8 9
此时其实序列已经完成,但是根据上述代码仍得继续遍历,直至第9趟排序。这显然是不合理的,如果我们能在代码中加入一个flag标记上一趟排序中是否进行过交换,如果进行过未进行交换,说明当前数组以及有序。
代码如下:

function bubbleSort(arr){
  var flag = true;
  while(true){
    flag = false;
    for(var i = 0; i < arr.length-1; i++){
      for(var j = 0;j < arr.length-i;j++){
        if(arr[j] > arr[j+1]){
          var t = arr[j];
          arr[j] = arr[j+1];
          arr[j+1] = t;
          flag = true;
        }
      }
    } 
  }
  
  return arr;
}

var arr = [1, 3, 4, 5, 6, 7, 8, 9, 2];
bubbleSort(arr);  //[1, 2, 3, 4, 5, 6, 7, 8, 9]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 某次二面时,面试官问起Js排序问题,吾绞尽脑汁回答了几种,深感算法有很大的问题,所以总计一下! 排序算法说明 (1...
    流浪的先知阅读 4,922评论 0 4
  • Ba la la la ~ 读者朋友们,你们好啊,又到了冷锋时间,话不多说,发车! 1.冒泡排序(Bub...
    王饱饱阅读 5,782评论 0 7
  • 人生得失并存,你拥有了清风,就要交还明月。时光不会逆转,一旦选择了,就没有回头。
    小丸子与草裙阅读 1,702评论 0 0
  • 今天,我读了王一方的----通往纯粹的羊肠小道这篇文章,读后思潮翻滚,激动不已。文章所写的施韦泽原是一位哲学神学双...
    小泥蛋儿阅读 1,283评论 0 0
  • 今晚的读书会如期而至。可能因为在外面,没Wi-Fi,QQ出现故障,开始进入聊天室时我能听到语音,但无法看到大...
    美廷阅读 2,047评论 0 0

友情链接更多精彩内容