JavaScript(一维数组的冒泡排序)

129 阅读2分钟

概念

针对数字数组的入门经典排序算法。其他排序算法比如快速排序、二分排序、插入排序等。

流程

主要原理:整个冒泡排序过程分为多次的排序过程。
每次排序过程都会将待排序中的最大值放在数组的末尾。
单次排序过程是从数组开头开始,依次进行相邻两个数的比较,将较大的数字位置进行交换,一直到数组末尾结束单次排序过程。

例子讲解

var arr = [36,26,27,2,4,19,50,48];
第一次排序过程:将50放在数组末尾
    36和26比较   36>26  ,两者交换  [26,36,27,2,4,19,50,48];
    36和27比较   36>27  ,两者交换 [26,27,36,2,4,19,50,48];
    36和2比较   36>2  ,两者交换 [26,27,2,36,4,19,50,48];
    36和4比较   36>4  ,两者交换 [26,27,2,4,36,19,50,48];
    36和19比较   36>19  ,两者交换 [26,27,2,4,19,36,50,48];
    36和50比较   36<50  ,两者不交换 [26,27,2,4,19,36,50,48];
    50和48比较   50>48  ,两者交换 [26,27,2,4,19,36,48,50];
    结束
第二次排序过程:将50放在数组末尾[26,27,2,4,19,36,48,50];
    26和27比较 26<27 ,两者不交换 [26,27,2,4,19,36,48,50];
    27和2比较 27>2 ,两者交换 [26,2,27,4,19,36,48,50];
    27和4比较 27>4 ,两者交换 [26,2,4,27,19,36,48,50];
    27和19比较 27>19 ,两者交换 [26,2,4,19,27,36,48,50];
    27和19比较 27>19 ,两者交换 [26,2,4,19,27,36,48,50];
    27和36比较 27<36 ,两者不交换 [26,2,4,19,27,36,48,50];
    36和48比较 36<48 ,两者不交换 [26,2,4,19,27,36,48,50];
    48和50比较 48<50 ,两者不交换 [26,2,4,19,27,36,48,50];
    .。。
第length-1次排序后,就无需排序,因为就一个位置待排序。


    var arr = [36,26,27,2,4,19,50,48];
    //外层for:表示第几次排序过程
    for(var i=1;i<=arr.length-1;i++) {
        //第i次排序过程的详细排序
        for(var j=0;j<arr.length-i;j++) {
            if(arr[j]>arr[j+1]) {
                //两者交换
                var temp = arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
                }
            }
        }
    console.log(arr);
    

var arr = [36,26,27,2,4,19,50,48];
//封装函数
function sortArray(array) {
    for(var i=1;i<=array.length-1;i++) {
        //第i次排序过程的详细排序
        for(var j=0;j<array.length-i;j++) {
            if(array[j]>array[j+1]) {
                //两者交换
                var temp = array[j];
                array[j]=array[j+1];
                array[j+1]=temp;
                }
            }
        }
        return array;
    }
    arr = sortArray(arr);
    console.log(arr);