JavaScript排序算法:冒泡排序

冒泡排序

算法描述(从小到大排序)
比较相邻的元素,如果前一个比后一个大,交换之。
第一趟:第1个和第2个元素比较,随后第2个和第3个比较,这样直到倒数第2个和最后1个,将最大的数移动到最后一位。
第二趟:重复上面步骤,将第二大的数移动至倒数第二位

因此需要n-1趟;

// 冒泡排序

function BubbleSort(arr) {
  // 判断是否数组
  if (Array.isArray(arr)) {
    console.log('yes');
    // 遍历
    let len = arr.length;
    for (let i = 0; i < len; i++) {
      for (let j = 0; j < len; j++) {
        let max = arr[j];
        if (arr[j] > arr[j + 1]) {
          max = arr[j];
          arr[j] = arr[j + 1];
          arr[j + 1] = max;
        }
      }
    }
    return arr;
  } else {
    console.log('no');
  }
}

// 冒泡排序优化
function BubbleSortOptimization(arr) {

  // 判断是否数组
  if (Array.isArray(arr)) {
    console.log('yes');
    // 遍历
    let len = arr.length ;
    for (let i = 0; i < len; i++) {
      //因为每一次遍历,最大的值会排在最后,所以外层遍历每循环一次,len长度可减1
      for (let j = 0; j < len - i; j++) {
        let max = arr[j];
        if (arr[j] > arr[j + 1]) {
          max = arr[j];
          arr[j] = arr[j + 1];
          arr[j + 1] = max;
        }
      }
    }
    return arr;
  } else {
    console.log('no');
  }
}

console.log('satrtTime', new Date().valueOf());
console.log('BubbleSort', BubbleSort([5, 4, 9, 7, 1, 2, 6, ]));
console.log('endTime', new Date().valueOf());

console.log('BubbleSortOptimization', BubbleSortOptimization([5, 4, 9, 7, 1, 2, 6]));
console.log('endTime', new Date().valueOf());

最终版本

/*
    BuubleSort:冒泡排序;前后两个数比较大小,设置小的排前面
    example:[2,7,1,89,35,4,9,11]
    平均时间复杂度:O(n^2);
    最好的时间复杂度: O(n);--一次遍历即可
    最坏的时间复杂度:O(n^2);
*/

function BubbleSort(arr) {
    // iS Array
    if (!(arr instanceof Array)) return;

    let length = arr.length - 1;
    // 当数组存在元素并且多于一个元素时执行
    if (length) {
        let temp;
        for (let i = 0; i < length; i++) {
            // 每次排序,最大的会在后面,便不需要再继续排序,即jarr.length - 1
            for (let j = 0; j < length - i; j++) {
                // 当后面的数值小于前面的数值时,交换位置
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }

        }

    }
    console.log(arr);
    return arr;
}
BubbleSort([2, 7, 1, 89, 35, 4, 9, 11]);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值