核心:

相邻的两个单元进行数据比较
之后按照 排序 要求 交换 单元 存储数据
多次执行排序,最终完成效果

优化:

循环比较 最后一个单元,没有下一个单元进行比较,只需要循环至 倒数第二个单元
一次循环排序出一个最大值, n 个单元 需要循环 n-1 次 完成整个数组的排序 最后一个单元没有排序比较的对象了
之前循环比较出的最大值,不再参与之后的循环比较
第一次 少比较 0 个单元
第二次 少比较 1 个单元
第三次 少比较 2 个单元
....
第n次  少比较 n-1 个单元

代码:

        var arr = [12,13,99,65,894,313,98523,213];
        // 使用 外层 循环变量  j 生成 从 0 开始的数值 也就是 每次比较,少比较的单元个数
        // 循环执行 length-1 次
        for(var j = 0 ; j < arr.length-1 ; j++){
            var bool = true;
            // 循环执行 length-1-j 次
            for(var i = 0 ; i < arr.length-1-j ; i++){ // 当前单元是 arr[i] 下一个单元是 arr[i+1]; 
                if(arr[i] > arr[i+1]){
                    bool = false;
                    // 数据交换操作
                    // 将数值大的放到数组最后
                    var tmp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = tmp;
                }
            }
            if( bool === true ){
                break;
            }
        }
        console.log(arr);

一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。