排序和搜索算法学习之冒泡

488 阅读2分钟

来了广东就是靓仔!!但是 --- 不学习和咸鱼有什么分别?

此文 弄 排序算法之最Sinple的冒泡排序,即便如此,他依然是不推荐使用的,至于原因嘛,各位铁子大哥小姐姐,请继续往下看🙃。

屁话少放!直接来了解什么tmd...🤸‍♀️额!注意素质!好

冒泡排序:比较任何两个相邻得项,如果第一个比第二个大,则交换他们。直至元素向上移动至这个确定得顺序,就像气泡上升一样。

    // 先准备下排序算法的数据结构,👇
    function ArrayList() {
        var array = [];
        this.insert  = function(element) {
            array.push(element);
        } 
        this.toString = function() {
            return array.join();
        }
    }

在 ArrayList中实现算法

    // 👉 从运行时间上看 冒泡排序是最差的一个。 各位:这就是不推荐的原因---其复杂度 是 O²
    this.bubbleSort = function() {
        var length = array.length;
        for (var i = 0; i < length; i++) {
            for (var y = 0; y < length - 1; y++) {
                if (array[y] > array[y + 1]) {
                    swap(array, y, y+1)
                }
            }
        }
    }
    
    
    // 交换函数
    var swap = function(array, index1, index2) {
        var aux = array[index1];
        array[index1] = array[index2];
        array[index2] = aux;
        // es6交换的方式 ---增强的对象属性
        // [array[index1], array[index2]] = [array[index2], array[index1]]
    }

来段测试用例 -- 是个Man就要动嘴 🤪 上手!

// 构建没有排序的数组
function createNotSortedArray(size) {
    var array = new ArrayList();
    for (var i = size; i > 0; i--) {
        array.insert(i)
    }
    return array;
}

console.time('array 1')
var array = createNotSortedArray(10);
console.log(array.toString()); // 10,9,8,7,6,5,4,3,2,1
array.bubbleSort();
console.log('sorted', array.toString()); // sorted 1,2,3,4,5,6,7,8,9,10
console.timeEnd('array 1')  // array 1: 1.02490234375ms

进行改进!!📌

思路:从内循环减去外循环中已经轮过的轮数,就能避免内循环中所有不必要的的比较。
    // 优化
    this.optimizedBubbleSort = function() {
        var length = array.length;
        for (var i = 0; i < length; i++) {
            for (var y = 0; y < length - 1 - i; y++) {
                if(array[y] > array[y + 1]) {
                    swap(array, y, y + 1);
                }
            }
        }
    }

最后给上一段优化后的测试 💤 时间几乎是优化前的二分之一

console.time('array 2')
var array2 = createNotSortedArray(10);
console.log(array2.toString()); // 10,9,8,7,6,5,4,3,2,1
array2.optimizedBubbleSort();
console.log('sorted', array2.toString()); // sorted 1,2,3,4,5,6,7,8,9,10
console.timeEnd('array 2') // array 2: 0.5546875ms

最后BB一句,No matter how pain, you are the world won't stop turning for you.The sun also rises.