• 关于JS的算法


    一.快速排序

    function qSort(arr) {
        if(arr.length === 0) {
            return [];
        }
    
        var left = [];
        var right = [];
        var pivot = arr[0];
    
        for (var i = 1; i < arr.length; i++) {//从i=1开始
            if(arr[i] < pivot) {
                left.push(arr[i]);
            }else {
                right.push(arr[i]);
            }
        }
        return qSort(left).concat(pivot, qSort(right));
    }//快速排序
    
    window.onload = function() {
        var a = [];
        for (var i = 0; i < 10; ++i) {
           a[i] = Math.floor((Math.random()*100)+1); 
        }
        console.log(a);
        console.log(qSort(a));//快速排序
    }
    

      

    二.插入排序

    function insertionSort(arr) {
        var temp, inner;
        console.log(arr);
        for(var outer = 1; outer < arr.length; outer++) {
            temp = arr[outer];
            inner = outer;
            while(inner > 0 && (arr[inner - 1] >= temp)) {
                arr[inner] = arr[inner - 1];
                inner--;
            }
            arr[inner] = temp;
        }
        return arr;
    }//插入排序
    
    
    window.onload = function() {
        var a = [];
        for (var i = 0; i < 10; ++i) {
           a[i] = Math.floor((Math.random()*100)+1); 
        }
        console.log(a);
        console.log(insertionSort(a));//插入排序
    }
    

      

    三.选择排序法

        function selectionSortMax(arr) {
            var max;
            for(var outer = 0; outer < arr.length; outer++) {
                max = 0;
                for(var inner = 0; inner < arr.length - outer; inner++) {
                    if(arr[inner] > arr[max]) {
                        max = inner;
                    }
                }
                swap(arr, max, arr.length - outer - 1);
            }
            return arr;
        }//选择排序法选择最大值移到最后
    
        function selectionSortMin(arr) {
            var min, temp;
            for(var outer = 0; outer < arr.length - 1; outer++) {
                min = outer;
                for(var inner = outer + 1; inner < arr.length; inner++) {
                    if(arr[inner] < arr[min]) {
                        min = inner;
                    }
                }
                swap(arr, min, outer);
            }
            return arr;
        }//选择排序法选择最小值移到最前
    
        function swap(arr, index1, index2) {
            var temp = arr[index2];
            arr[index2] = arr[index1];
            arr[index1] = temp;
        }
    
        window.onload = function() {
            var a = [];
            for (var i = 0; i < 10; ++i) {
               a[i] = Math.floor((Math.random()*100)+1); 
            }
            console.log(a);
            console.log(selectionSortMax(a));
            console.log(selectionSortMin(a));
        }
    

      

    四.冒泡排序法

    function bubbleSort(arr) {
        var temp;
        for(var outer = arr.length; outer > 1; outer--) {
            for(inner = 0; inner < outer - 1; inner++) {
                if(arr[inner] > arr[inner + 1]) {
                    swap(arr, inner, inner + 1);
                }
            }
        }
        return arr;
    }//冒泡排序法
    
    
    function swap(arr, index1, index2) {
        var temp = arr[index2];
        arr[index2] = arr[index1];
        arr[index1] = temp;
    }
    
    window.onload = function() {
        var a = [];
        for (var i = 0; i < 10; ++i) {
           a[i] = Math.floor((Math.random()*100)+1); 
        }
        console.log(a);
        console.log(bubbleSort(a));//冒泡排序法
    }
    

    五.归并算法

    function mergeSortRec(array) {
            var length = array.length;
            if(length == 1) {
                return array;
            }
    
            var mid = Math.floor(length / 2);
            var left = array.slice(0, mid);
            var right = array.slice(mid, length);
    
            return merge(mergeSortRec(left), mergeSortRec(right));       
        }
    
    function merge(left, right) {
        var result = [];
        var il = 0;
        var ir = 0;
        while(il < left.length && ir < right.length) {
            if(left[il] < right[ir]) {
                result.push(left[il++]);
            }else {
                result.push(right[ir++]);
            }
        }
    
        while(il < left.length) {
            result.push(left[il++]);
        }
    
        while(ir < right.length) {
            result.push(right[ir++]);
        }
    
        return result;
    }
    
    window.onload = function() {
        var a = [];
        for (var i = 0; i < 10; ++i) {
           a[i] = Math.floor((Math.random()*100)+1); 
        }
        console.log(a);
        console.log(mergeSortRec(a));//归并排序法
    }

    通过时间戳可以得到快速排序>选择排序>插入排序>冒泡排序。

  • 相关阅读:
    Linux thread 泄露问题
    QQ通讯原理
    小谈Onlinegame服务器端设计
    Linux 如何打开端口
    linux系统软件更新
    MVC
    wubi+ubuntu
    [转]openfire源码部署~
    Apache开源项目分类列表[转]
    [转]java.util.MissingResourceException: Can't find bundle for base name
  • 原文地址:https://www.cnblogs.com/pcd12321/p/5279628.html
Copyright © 2020-2023  润新知