zoukankan      html  css  js  c++  java
  • javascript的冒泡排序, 快速排序, 选择排序, 插入排序

      冒泡排序, 最经典的排序, 把比较大的数字往后放, 和选择排序恰恰相反:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <script>
            function sort(elements){
                for(var i=0;i<elements.length-1;i++){
                    for(var j=0;j<elements.length-1;j++){
                        if(elements[j]>elements[j+1]){
                            var swap=elements[j];
                            elements[j]=elements[j+1];
                            elements[j+1]=swap;
                        }
                    }
                }
            }
    
            var elements = [3, 1, 5, 7, 2, 4, 9, 6, 10, 8];
            console.log('before: ' + elements);
            sort(elements);
            console.log(' after: ' + elements);
        </script>
    </body>
    </html>

       javascript实现的快速排序, 选取数组的第一个为中间值, 然后把小于中间值的元素排到数组的左边, 把大于中间值的元素排到数据右边, 充分利用二分法, 排序效率非常高:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>quick sort</title>
    </head>
    <body>
        <script>
            var arr = [5,2,9,8,4,10,8];
            function quick(arr) {
                if(arr.length<=1) {
                    return arr;
                }
                //指定第一个元素为中间元素
                var val = arr[0];
                arr.splice(0,1);
                var left = [], right = [];
                for(var i=0, len = arr.length ; i<len; i++) {
                    if(arr[i]<val) {
                        left.push(arr[i]);
                    }else if(arr[i]>val) {
                        right.push(arr[i]);
                    }else{
                        left.push(arr[i]);
                    }
                }
                return [].concat(quick(left),val,quick(right));
            }
            console.log(quick(arr));
        </script>
    </body>
    </html>

       JS实现插入排序:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>insert</title>
    </head>
    <body>
        <script>
            var arr = [5,2,9,8,4,10,1,3];
            function sort(arr) {
                //假设第一个为有序的, 除了第一个以外全部是无序的;
                for(var i=1; i<arr.length; i++) {
                    if(arr[i] < arr[i-1]) {
                        var val = arr[i];
                        arr[i] = arr[i-1];
                        var j = i-1;
                        while(val<arr[j]&&j>=0) {
                            arr[j+1] = arr[j];
                            j--;
                        }
                        arr[j+1] = val;
                    }
                }
                return arr;
            };
            console.log( sort(arr) );
        </script>
    </body>
    </html>

       javascript中的选择排序, 寻找数组中的最小元素 , 让他与数组中的第一个元素互换, 然后在剩余的数组中找到最小的元素, 让他与第二个元素互换, 依次类推, 就是选择排序的逻辑:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>select sort</title>
    </head>
    <body>
        <script>
            var arr = [5,2,9,8,4,10,1,3,3];
            function sort(arr) {
                for(var i=0; i<arr.length-1; i++) {
                    for(var j=i; j<arr.length; j++) {
                        if(arr[j]<arr[i]) {
                            var val = arr[i];
                            arr[i] = arr[j];
                            arr[j] = val;
                        }
                    }
                }
                return arr;
            };
            console.log( sort(arr) );
        </script>
    </body>
    </html> 

      EOF————

    作者: NONO
    出处:http://www.cnblogs.com/diligenceday/
    QQ:287101329
    微信:18101055830 

  • 相关阅读:
    for是个什么玩意
    面向对象 多态
    面向对象 接口
    面向对象oop
    面向对象基本
    java修饰符的作用范围
    static 关键字介绍
    JsonLayout log4j2 json格式输出日志
    多线程--Thread.join方法
    idea常用实用快捷键
  • 原文地址:https://www.cnblogs.com/diligenceday/p/6592049.html
Copyright © 2011-2022 走看看