冒泡排序 Bubble Sort(JavaScript)

冒泡排序 Bubble Sort

思路(升序 Asc)

  1. 一个包含n个元素的数组data
  2. k从0到n-2,分别对比data[k]和data[k+1]的大小,如果data[k]大 就交换二者顺序
  3. k从0到n-3,分别对比data[k]和data[k+1]的大小,如果data[k]大 就交换二者顺序
  4. …一直循环计算k从0到1(如果数据元素个数小于2 则直接返回)

代码

class BubbleSort{
    /**
     * 升序排列
     * @param array
     * @returns {*}
     */
    static sortAsc(array){
        let size = array.length;
        if (size < 2){
            return array;
        }else {
            size --
            while (size > 0){
                for (let i=0;i<size;i++){
                    let a = array[i]
                    let b = array[i+1]
                    if (a > b){
                        array[i] = b;
                        array[i+1] = a;
                    }
                }
                size--
            }
        }
        return array;
    }

    /**
     * 降序排列
     * @param array
     * @returns {*}
     */
    static sortDes(array){
        let size = array.length;
        if (size < 2){
            return array;
        }else {
            size --
            while (size > 0){
                for (let i=0;i<size;i++){
                    let a = array[i]
                    let b = array[i+1]
                    if (a < b){
                        array[i] = b;
                        array[i+1] = a;
                    }
                }
                size--
            }
        }
        return array;
    }
}

效果检验

const data1 = [4, 1]
const data2 = [1, 4, 2, 5, 6]
const data3 = [4]

// test the function
console.log("升序排列: " + "输入数据: " + data1 + "  排序结果数据: " + BubbleSort.sortAsc(data1))
console.log("升序排列: " + "输入数据: " + data2 + "  排序结果数据: " + BubbleSort.sortAsc(data2))
console.log("升序排列: " + "输入数据: " + data3 + "  排序结果数据: " + BubbleSort.sortAsc(data3))


console.log("降序排列: " + "输入数据: " + data1 + "  排序结果数据: " + BubbleSort.sortDes(data1))
console.log("降序排列: " + "输入数据: " + data2 + "  排序结果数据: " + BubbleSort.sortDes(data2))
console.log("降序排列: " + "输入数据: " + data3 + "  排序结果数据: " + BubbleSort.sortDes(data3))

在这里插入图片描述

时间复杂度测试

const numList = [10, 100, 1000, 10000, 100000]
numList.forEach(function (num){
    let data = []
    for (let i=0;i<num;i++){
        data.push(GetRandomNum(0, 1000))
    }

    console.time(`bubble sort for num ${num}`);
    BubbleSort.sortAsc(data)
    console.timeEnd(`bubble sort for num ${num}`);

})

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值