• 排序


    JS之排序算法

    在平时的工作中呢也用不到太多的算法,但是私认为算法还是挺锻炼一个程序员的逻辑思维的,写一下会的几种算法吧

    冒泡排序:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function bubbleSort(arr){
            for(var i=0;i<arr.length;i++){
                for(var j=0;j<arr.length-i;j++){
                    if(arr[j]>arr[j+1]){
                        var num = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = num;
                    }
                }
                console.log(arr);
            }
            return arr
        }
        var num = [1,2,1,3,7,4,9,0];
        console.log(bubbleSort(num));

    解析一下:

    ·第一遍外循环i=0时,j也是0,j<arr.length-i的话呢,就是遍历整个数组,里面的if判断呢就是两两比较,arr[j]和arr[j+1]哪个大,然后把大的放在后面,这样就把数组中最大的那个家伙放到的数组末尾啦

    ·第二遍外循环i=1时,j还是0,j<arr.length-i呢,内循环就不会遍历到数组的末尾了,就是最大的那个家伙呢不用参加这次遍历了,那么这次呢,又把数组里面第二大的家伙排到了倒数第二的位置了

    ·后面就是同上类推了,理解一下的话,就是冒泡一样,把最大的一遍一遍的冒泡到数组的末尾,退出整个函数的时候呢,整个数组就排好顺序了

    快速排序:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function quickSort(arr){
            if(arr.length <= 1){
                return arr;
            }
            var index = Math.floor(arr.length/2);
            var middle = arr.splice(index,1);
            var left = [];
            var right = [];
            for(var i=0;i<arr.length;i++) {
                if(arr[i] < middle){
                    left.push(arr[i])
                }else{
                    right.push(arr[i]);
                }
            }
            return quickSort(left).concat(middle,quickSort(right));
        }
     
        var aaa = [1,3,2,7,1,5,9,2];
        alert(quickSort(aaa));

    解析:

    ·首先判断数组长度是否小于等于1,是的话直接return回去

    ·splice取出数组的中位数middle,整个数组里面没有middle这个数了哦

    ·新建两个left和right数组

    ·遍历整个数组,判断arr[i]是小于还是大于中位数middle,小于的push到left这个数组,大于的push到right这个数组里

    ·最后一句,将left和right两个数组当做参数递归调用quickSort函数。并且呢用concat连接起来,别忘了还有个中位数哦

    ·之后的递归就是回到第一步重复调用了,当left或者right数组长度为1时,就是排好顺序啦

    整个快速排序算法的逻辑就是把数组对半,小的放左边,大的放右边,然后再把左右两边继续对半分,小的放左边,大的放右边,不断如此··········

    拿写的aaa数组来说,中位数是7,那么left就是[1,3,2,1,5,2],right就是[9],然后递归left,还是很好理解的吧

    最后是JS的array对象的sort方法排序,我也不知叫什么名-。-

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function ArraySort(){
            var tag = [];
            for(var i= 0;i<arguments.length;i++){
                tag.push(arguments[i]);
            }
            tag.sort(function(compare1,compare2){
                return compare1 - compare2
            })
            return tag
        }
        console.log(ArraySort(1,2,5,1,2,3,9,7,8));

    解析:

    ·sort方法传入两个参数compare1,compare2,两两进行比较,如果compare1-compare2小于0呢,两两之间就不换位置,反之就调换位置

    ·当然可以这样写 return compare2 - compare1,这样呢就是倒序排列了

  • 相关阅读:
    jQuery自定义选项卡插件
    jQuery委托事件delegate()方法
    发布/订阅模式
    Node.js + Nginx WNMP 多域名 多端口 反向代理
    让Nginx支持apk、ipa文件下载
    jQuery中bind方法传参
    Http协议详解
    vuecli2.X环境搭建
    vue绑定属性、绑定class及绑定style
    vue数据渲染、条件判断及列表循环
  • 原文地址:https://www.cnblogs.com/MrzhangKk/p/5244890.html
Copyright © 2020-2023  润新知