美文网首页
js中几种常用排序算法

js中几种常用排序算法

作者: isSunny | 来源:发表于2019-07-24 21:17 被阅读0次
给出一个数组var bb = [1,2,4,3,56,12,34,0];用几种常用方法对其升序排序:

1.sort()

        bb.sort(function(a,b){
            return a-b;
        })
        console.log(bb);//[0, 1, 2, 3, 4, 12, 34, 56]

2.冒泡排序

function Sort1(arr){
            var temp;
            for(var i=0;i<arr.length;i++){
                for(var j=0;j<arr.length-1-i;j++){
                    if(arr[j]>arr[j+1]){
                        temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1]=temp;
                    }
                }
            }
            return arr;
        }

console.log(Sort1(bb));//[0, 1, 2, 3, 4, 12, 34, 56]

冒泡方法的重点在arr.length-1-i这句,重复每一次排序的序列,一次比较两个元素,如果顺序错误就把它们调整过来(升序)。

3.选择排序
思想:有一个中间值,每次比较的是给定的索引值和数组中后面每个值的比较,如果当前索引的值大于后面的索引值,通过中间值对两者进行交换。

        function Sort2(arr){
            var temp;
            for(var i =0;i<arr.length;i++){
                for(var j=i+1;j<arr.length;j++){
                   if(arr[i]>arr[j]){
                       temp = arr[i];
                       arr[i] = arr[j];
                        arr[j]=temp;
                    }
                }
            }
            return arr;
        }
        console.log(Sort2(bb));//[0, 1, 2, 3, 4, 12, 34, 56]

4.快速排序
思想:快速排序的思想最好理解,新建一个三个新数组,给需要排序的数组做循环,用每一个索引值和数组中间值做比较,大于中间值的放在右面数组,小于中间值的放在左边数组,最后用concat将数组做连接。

 function Sort3(arr){
            if (arr.length <= 1) {
                return arr;
            }
            var mid = Math.floor(arr.length/2);
            var midVal = arr.splice(mid,1)[0];
            var leftArr = [];
            var rightArr = [];
            var newArr = [];
            for(var i =0;i<arr.length;i++){
                if(arr[i]<midVal ){
                    leftArr.push(arr[i]);
                }else{
                    rightArr.push(arr[i]);
                }
            }
            newArr= Sort3(leftArr).concat(midVal,Sort3(rightArr));;
            return newArr;
        }
        console.log(Sort3(bb));//[0, 1, 2, 3, 4, 12, 34, 56]

5.插入排序
思想:会玩扑克牌就能理解什么是插入排序,很简单,先抓一张牌放在手里,然后新抓的牌和手里的牌从后往前作比较,当新抓的牌大于手里的牌放在其后面,如果小于依次和前面的牌作比较,最后当比较到手里第一张,直接插入到最前面。

function insert(arr){
        let handle = [];
        handle.push(arr[0]);
        for(let i =1;i<arr.length;i++){
            let a = arr[i];
            for(let j=handle.length-1;j>=0;j--){
                let b = handle[j];
                if(a>b){
                    handle.splice(j+1,0,a);
                    break;
                }
                if(j===0){
                    handle.unshift(a);
                }

            }
        }
        return handle;
    }

相关文章

网友评论

      本文标题:js中几种常用排序算法

      本文链接:https://www.haomeiwen.com/subject/wsnfrctx.html