zoukankan      html  css  js  c++  java
  • 排序-冒泡排序

    冒泡排序算法的运作如下:
    1. 比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。
    2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大(小)的数
    3. 针对所有的元素重复以上的步骤,除了最后一个
    4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    每次对数组进行一次交换,只会确定最后的数,所以,下一次从头开始比较,不需要再对最后一个数进行比较了,如果循环往复,直到最后只剩索引为0的数字,将不再需要进行循环比较。

    举个例子,有个数组如下:

    [9, 7, 8, 33, 45]

    第一次比较:

    1. 9与7比较,交换位置;
    2. 9再与8比较,交换位置;
    3. 9与33比较,不需交换;
    4. 33与45比较,不需交换;

    第一次的结果为:

    [7, 8, 9, 33, 45]

    除了45确定为最大值外,其余项需要再一次的比较,直到最终后四项都确定了,不再需要再次比较。

    下面展示了如何用js代码实现冒泡排序:

    方法一:

    function bubblesort(arr, endindex) {
        var len = endindex ? endindex : arr.length;
        if(len == 1) {
            return arr;
        }
        for(var i=0; i< len - 1; i++) {
            var prev = arr[i],
                next = arr[i+1];
            if(prev > next) {
                arr[i] = next;
                arr[i+1] = prev;
            }
        }
        arguments.callee(arr, len-1);
    }

    方法二

    function bubblesort2(arr) {
        var len = arr.length, i = len, j = 0;
        while(i > 0) {
            for(j = 0; j< i - 1; j++) {
                var prev = arr[j],
                    next = arr[j+1];
                if(prev > next) {
                    arr[j] = next;
                    arr[j+1] = prev;
                }
            }
            i--;
        }
        return arr;
    }

    方法三(使用es6的解构赋值):

    export function bubblesort3(arr) {
        let len = arr.length;
        let [i, j] = [len, 0];
        while(i > 0) {
            for(j = 0; j< i - 1; j++) {
                let prev = arr[j],
                    next = arr[j+1];
                if(prev > next) {
                    [arr[j], arr[j+1]] = [next, prev];
                }
            }
            i--;
        }
        return arr;
    }
  • 相关阅读:
    socket based————转帖
    罗马假日 java程序员
    java六大必须理解的问题来自网络少许有误 java程序员
    spring的scope="prototype" java程序员
    @GeneratedValue java程序员
    myeclipse乱码和tomcat相关的 java程序员
    关于***.hbm.xml的说明 java程序员
    hibernate中的Annotation补充 java程序员
    爱的随笔C语言版 java程序员
    Hibernate对jpa annotation的支持 java程序员
  • 原文地址:https://www.cnblogs.com/yanyalun/p/7801823.html
Copyright © 2011-2022 走看看