• JavaScript 排序学习


      冒泡排序

      选择排序

      插入排序

      更新一个(快速排序)

      对于好久都不清楚的排序今天理了一下,包括冒泡排序、选择排序、插入排序,写完这个再看看和快速排序的区别。感觉大学学的都还给老师了。

    ----冒泡

    /*
      现在有 数组 arr=[4,9,7,1,3]
      相邻值之间进行对比,前者比后者大,则进行互换,每一次都会把最大的放到最后面
       4 | 9 | 7 | 1 | 3
       第一轮
        4 | 7 | 1| 3 | 9
       第二轮
       4 | 1 | 3 | 7 | 9
       第三轮
       1 | 3 | 4 | 7 | 9
       第四轮
       1 | 3 | 4 | 7 | 9
    *

    冒泡排序的具体代码

    var arr=[4,9,7,1,3];
        maopao(arr);
        function maopao(arr){
            for(var i=0;i<arr.length-1;i++){ //循环次数是length-1
                for(var j=0;j<arr.length-i-1;j++){//内部循环
                    if(arr[j]>arr[j+1]){
                        var temp=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=temp;
                    }
                }
            }
            console.log('冒泡排序'+arr);
        }

    ----选择排序

    /*
         现在有 数组 arr=[4,9,7,1,3]
         假设 i下表对应的值是最小值,然后,分别和数组中的每一个值进行对比
         4 | 9 | 7 | 1 | 3
         第一轮
         1 | 7 | 4| 3 | 9
         第二轮
         1 | 3 | 7 | 4 | 9
         第三轮
         1 | 3 | 4 | 7 | 9
         第四轮
         1 | 3 | 4 | 7 | 9
         */
    var arr=[4,9,7,1,3];
        xuanzepaixun(arr);
        function xuanzepaixun(arr){
            for(var i=0;i<arr.length-1;i++){
                for(var j=i+1;j<arr.length;j++){
                    var min=i;  //假设下标为i的值是最小值
                    if(arr[min]>arr[j]){ //分别和数组中的值依次进行对比
                        var temp=arr[j];
                        arr[j]=arr[min];
                        arr[min]=temp;
                    }
                }
            }
            console.log('选择排序'+arr)
        }

    ---插入排序

    /*
         现在有 数组 arr=[4,9,7,1,3]
         把下标为i的值分别与下标i前面的值进行对比进行从小到大排序
         4 | 9 | 7 | 1 | 3
         第一轮
         4 | 9 | 7 | 1 | 3
         第二轮
         4 | 7 | 9 | 1 | 3
         第三轮
         1 | 4 | 7 | 9 | 3
         第四轮
         1 | 3 | 4 | 7 | 9
         */
    
        var arr=[4,9,7,1,3];
        charupaixu(arr);
        function charupaixu(arr){
           for(var i=1;i<arr.length;i++){
               var num=arr[i];
               var j=i;
               while(arr[j-1]>num){
                   arr[j]=arr[j-1];
                   --j;
               }
               arr[j]=num;
           }
           console.log(arr);
        }

     ---快速排序

        //1.在数据之中,找个基准点
        //2.建立两个数组,分别存储左边和右边的数组
        //3.利用递归进行下次比较
    
        function quirkSort(arr){
            if(arr.length<=1){
                return arr;//如果数组只有一个数,就直接返回
            }
    
            var num=Math.floor(arr.length/2);//找到中间数的索引值,如果是浮点数,则向下取整
            var numValue=arr.splice(num,1);//找到中间数的值
    
            var left=[];
            var right=[];
    
            for(var i=0;i<arr.length;i++){
    
                if(numValue>arr[i]){
                    left.push(arr[i]);//小于numValue的数传到左边
                }else{
                    right.push(arr[i])//大于numValue的数传到左边
                }
            }
            return quirkSort(left).concat(numValue,quirkSort(right));
            //进行递归重复比较
        }
    
    var arr=[7,3,4,8,9,5];
    alert(quirkSort(arr));//3,4,5,7,8,9

    快速排序参考地址:https://github.com/hawx1993/Front-end-Interview-questions

    ---小结

      冒泡、选择、插入排序,最大的不同就是数据不同数据之间对比方式不同,结果都一样。最后感觉快速排序更简单点。

  • 相关阅读:
    $.ajax()方法详解
    关于JDK动态代理和cglib动态代理
    关于eclipse maven引入第三方jar包后如何下载源代码
    关于oracle中table函数的使用
    ORA-00257:archiver error错误维护记录
    oracle学习笔记服务启动
    oracle学习笔记之用户管理-3
    oracle学习笔记之用户管理-2
    oracle学习笔记之用户管理-1
    github 手记
  • 原文地址:https://www.cnblogs.com/sisiliu/p/5974071.html
Copyright © 2020-2023  润新知