我是靠谱客的博主 忧虑饼干,最近开发中收集的这篇文章主要介绍JavaScript 数据结构与算法十大经典排序算法-冒泡排序(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

实现原理

简单来说就是实现的思想

  • 冒泡排序只会操作相邻的两个数据
  • 每次冒泡操作都会对相邻两个元素进行比较,看是否满足大小关系要求。如果不满足就让他俩互换
  • 一次冒泡会让至少一个元素移动到它应该再度位置,重复 n 次,就完成了 n 个数据的排序工作

特点

  • 优点:排序算法的基础,简单使用易于理解
  • 缺点:比较次数多,效率较低

实现

//冒泡排序(未优化)
const buddleSort = arr=>{
  let length = arr.length
  if ( length <=1 ) return
  // i < length - 1 是因为外层只需要 length-1 次就排好了,第 length 次比较是多余的。
  for ( let i=0; i<length-1; i++ ){
 	 // j < length - i - 1 是因为内层的 length-i-1 到 length-1 的位置已经排好了,不需要再比较一次。
    for (let j=0; j<length-i-1; j++){
      if (arr[j] > arr[j+1] ){
        const temp = arr[j]
        arr[j] = arr[j+1]
        arr[j+1] = temp
      }
    }
  }
}

突然发现自己好菜,这个代码乍一看没看懂。
上面代码实现方法是这样的(懂得直接跳过这段),数组两两对比会把大的那个往后排,这样第一次循环之后,数组中最大的会排到最后。所以内层循环for (let j=0; j<length-i-1; j++){ },在下一次循环时就可以少循环一次,以此类推,外层循环一次内层循环就少一个。这样每次外层循环对应内场循环就是length-i-1次。

优化:当某次冒泡操作已经没有数据交换时,说明已经到达完全有序,也就是已经排序完成,不用再继续执行后续的冒泡操作。

// 冒泡排序(已优化)
buddleSort = arr=>{
  let length = arr.length
  if ( length <=1 ) return
  // i < length - 1 是因为外层只需要 length-1 次就排好了,第 length 次比较是多余的。
  for ( let i=0; i<length-1; i++ ){
    let hasChange = false //标志代表是否某次排序数据没有交换,也就是代表排序已完成
    // j < length - i - 1 是因为内层的 length-i-1 到 length-1 的位置已经排好了,不需要再比较一次。
    for (let j=0; j<length-i-1; j++){
      if (arr[j] > arr[j+1] ){
        const temp = arr[j]
        arr[j] = arr[j+1]
        arr[j+1] = temp

        hasChange = true //这个时候是有数据交换的
      }
    }

    if(!hasChange) break // 如果false 说明内层循环在某次数据对比时没有进行数据交换过,这个时候就可以提前退出循环,排序已经完成
  }
}

以上就是冒泡排序的实现方法。

最后

以上就是忧虑饼干为你收集整理的JavaScript 数据结构与算法十大经典排序算法-冒泡排序(一)的全部内容,希望文章能够帮你解决JavaScript 数据结构与算法十大经典排序算法-冒泡排序(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部