总复习——关于排序

167 阅读2分钟

一,冒泡排序

理解:冒泡排序就是将数组进行从小到大的排序,先找大的放在后面,双重循环来控制,第一层循环控制轮数,设控制变量为i,每一层循环则为想要找出的本数组中(arr.length-i)大的数,并将其放在第数组中的第i位;第二层循环为找出每轮循环中最大的数,并将其放在每轮循环的最后面

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

二,选择排序

理解:选择排序就是将一个数组从小到大的排序,先找小的放在前面,双重循环来控制,第一层循环控制轮数,设控制变量为i,每一层循环则为想要找出的本数组中第i小的数,并放在所记录该循环的最小位置为i;第二层循环为找出每轮循环中最小的数,并将其放在每轮循环的最前面

for(var i=0;i<arr.length;i++){
    var min=i;
    for(var j=i;j<arr.length;j++){
        if(arr[j]<arr[min]){
            min=j;
        }
    }
    if(i!=min){
        [arr[i],arr[min]]=[arr[min],arr[i]];
    }
}

三,奇偶排序

arr.sort((a,b)=>a-b);
    var res=[];
    var odd=1;
    var ever=0;
    arr.forEach((item)=>{
        if(item%2==1){
            res[odd]=item;
            odd=odd+2;
        }
        else{
            res[ever]=item;
            ever=ever+2;
        }
    })

四,找出第k大元素

方法一:
    function find(arr,k){
        arr.sort((a,b)=>a-b);
        var h=arr.length-k;
        return arr[h];
        console.log(arr);
    }
    console.log(find([1,3,4,2],2));
方法二:
    function find(arr,k){
        for(var i=arr.length;i>=arr.length-k;i--){
            for(var j=0;j<i;j++){
                if(arr[j]>arr[j+1]){
                    [arr[j],arr[j+1]]=[arr[j+1],arr[j]];
                }
            }
        }
        return arr[arr.length-k];
    }
    console.log(find([1,3,2,4],3))

五,找出排序后相邻元素之间的最大差值

方法一:
    function findmaxcha(arr){
         if(arr.length<2){
         return 0;
         }
        arr.sort((a,b)=>a-b);
        var max=0;
        for(var i=0;i<arr.length-1;i++){
            if((arr[i+1]-arr[i])>max){
                max=arr[i+1]-arr[i];
            }
        }
        return max;
    }
    console.log(findmaxcha([1,4,6,10]))
    方法二:
    function findmaxcha(arr){
        var max=0;
        if(arr.length<2){
            return 0;
        }
        for(var i=arr.length-1;i>=0;i--){
            for(var j=0;j<=i;j++){
                if(arr[j]>arr[j+1]){
                    [arr[j],arr[j+1]]=[arr[j+1],arr[j]];
                }
            }
            if(i<arr.length-1){
                if(arr[i+1]-arr[i]>max){
                    max=arr[i+1]-arr[i]
                }
            }  
        }
        return max; 
    }
    console.log(findmaxcha([1,4,6,10]))

六,找出数组中排序后的最小正整数

方法一:
    function fn(arr){
        var res=arr.filter(item=>item>0);
        res.sort((a,b)=>a-b);
        if(res[0]!=1){
            return 1;
        }
        for(var i=1;i<res.length;i++){
            if((res[i]-res[i-1])!=1){
                return res[i-1]+1;
            }
        }
        return res.pop()+1;
    }
    console.log(fn([0,1,3]))
    方法二:
    function fn(arr){
        var res=arr.filter(item=>item>0);
        for(let i=0;i<res.length;i++){
            let min=i;
            for(let j=i;j<res.length;j++){
                if(res[i]<res[min]){
                    min=j;
                }
            }
            if(i!=min){
                [res[min],res[i]]=[res[i],res[min]];
            }
            if(res[0]!=1){
                return 1
            }
            if(res[i]!=i+1){
                return i+1;
            }
        }
    }
    console.log(fn([0,5,3]))