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

---小结

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

原文地址:https://www.cnblogs.com/sisiliu/p/5974071.html