排序算法01:冒泡排序

来源:互联网 发布:加内特2004季后赛数据 编辑:程序博客网 时间:2024/06/06 20:43

算法介绍

步骤:
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对第0个到第n-1个数据做同样的工作。这时,最大的数就“浮”到了数组最后的位置上。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

可视化效果:这里

Javascript实现

/** * Created by YiYing on 2017/4/22. */(function (W) {    function Bubble(arr) {        this.arr = arr;    }    /**     * 冒泡排序算法实现     */    Bubble.prototype.sort = function () {        var len = this.arr.length;        for(var i=0;i<len;i++){            //将最大的元素不断的沉到底部            for(var j=0;j<len-i-1;j++){                if(this.less(j+1,j)){                    this.exchange(j+1,j);                }            }        }    };    /**     * 判断m是否小于n     * @param m     * @param n     */    Bubble.prototype.less = function (m,n) {        //可根据不同的数据类型设置比对规则,比如json。这里适用于数字与字符串。        return this.arr[m]<this.arr[n];    };    /**     * 交换数组中m与n的位置     * @param m     * @param n     */    Bubble.prototype.exchange = function (m,n) {        var swap    = this.arr[m];        this.arr[m] = this.arr[n];        this.arr[n] = swap;    };    /**     * 打印排序后的数组     */    Bubble.prototype.show = function () {        console.log(this.arr);    };    /**     * 判断是否已排序     * @returns {boolean}     */    Bubble.prototype.isSorted = function () {        var len = this.arr.length;        for(var i=1;i<len;i++){            if(this.less(i,i-1)){                return false;            }        }        return true;    };    W.Bubble = Bubble;})(window);//测试代码(function () {    var arr = [4,5,6,0,3,5,21,7,9,0,1];    var bubble = new Bubble(arr);    console.log("排序前:"+bubble.isSorted());    bubble.sort();    console.log("排序后:"+bubble.isSorted());    bubble.show();})();

总结

  1. 稳定。相同元素排序后能保持排序前的相对顺序。
  2. 原地排序。
  3. 时间复杂度为:平方级别。
  4. 空间复杂度为:常数级别。

GitHub:https://github.com/AlbertKnag/algs-practice

下一篇:排序算法02:选择排序

0 0
原创粉丝点击