冒泡排序(英语:Bubble Sort)又称为泡式排序,是一种简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,
如果他们的顺序错误就把他们交换过来。
走访数列的工作是重复地进行直到没有再需要交换,
也就是说该数列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

解释

以上是 维基百科 关于冒泡的描述,转换为人话就是大概这么几条:

  • 冒泡排序是排序算法中较简单的算法
  • 每个元素依次去比较,如果大于下个值,则做值的交换。最终实现将最大值冒泡至顶端

bubble.gif

冒泡排序是一种比较算法,默认由小到大进行排序,比较符合人类思维。就是拿当前值下一个值去做比较。如果当前值小于下一个值,则表示正常顺序,不做处理。如果当前值大于下一个值,则它们两个的值做swap(交换)。
这样就保证了每次遍历后的最大值都是在队列(或者数组)的最右边, 所以,每当确定一个最大值,就固定了最右边的最大值,那么该值之后就不需再做判断。所以随着不断遍历,序列(或者数组)中已排好序的元素在不断增加,未排序的元素在不断减小。最终 实现冒泡排序

JS实现
const bubble_sort = arr => {
  for (let i = arr.length; i >= 1; i--) {
    // i >= 1: 最后一个元素不用做判断
    for (let j = 0; j <= i; j++) {
      // 双层判断 i在不断减小 排好序的元素在不断增大
      if (arr[j] < arr[j - 1]) {
        // 当前元素 小于 上一个元素
        // 值做交换
        swap(arr, j, j - 1);
      }
    }
  }
};

// 两个值交换函数
const swap = (arr, x, y) => {
  let temp = arr[x];
  arr[x] = arr[y];
  arr[y] = temp;
};

由上可见,冒泡排序十分的简单。通过两个for循环即可完成。但是它的时间复杂度O(n²),性能上很一般。

测试一下
let arr = [3, 2, 6, 1, 9, 123, 12, 15, 60];
bubble_sort(arr);
console.log(arr);
// [ 1, 2, 3, 6, 9, 12, 15, 60, 123 ]

Funky_Tiger
443 声望33 粉丝

刷题,交流,offer,内推,涨薪,相亲,前端资源共享...