描述

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

  3. 针对所有的元素重复以上的步骤,除了最后一个。

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

实现

  1. const bubbleSort = arr => {
  2. for (let i = 0; i < arr.length; i++) {
  3. for (let j = 0; j < arr.length - 1 - i; j++) {
  4. if (arr[j] > arr[j+1]) {
  5. let tmp = arr[j];
  6. arr[j] = arr[j+1];
  7. arr[j+1] = tmp;
  8. }
  9. }
  10. }
  11. return arr;
  12. };

改进

  1. const bubbleSort2 = arr => {
  2. let i = arr.length - 1;
  3. while (i > 0) {
  4. let pos = 0;
  5. for (let j = 0; j < i; j++) {
  6. if (arr[j] > arr[j+1]) {
  7. pos = j; // 记录最后一次交换的位置
  8. let tmp = arr[j];
  9. arr[j] = arr[j+1];
  10. arr[j+1] = tmp;
  11. }
  12. }
  13. i = pos;
  14. }
  15. return arr;
  16. };

时间复杂度: O(n²)