冒泡排序 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}`);

})
经验分享 程序员 微信小程序 职场和发展