六大排序算法的javascript实现

排序算法常见的有八种,分别为冒泡,选择,插入,希尔,归并,快排,堆排序,基数排,这里我只总结六大常见排序并用js来进行实现。至于每种排序算法的原理细节,读者可以参考其他人专门的博客进行学习,还有堆排序和基数排序读者也可以自行学习。

排序算法的时间和空间复杂度
1.冒泡排序

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

冒泡排序
2.选择排序

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

选择排序
3.插入排序

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

插入排序
4.希尔排序

function shellSort(arr){
    
    
    var gap=Math.floor(arr.length/2)

    while(gap>0){
    
    
        for(var i=gap;i<arr.length;i++){
    
    
            var temp=arr[i]
            var j=i
            while(arr[j-gap]>temp&&j>gap-1){
    
    
                arr[j]=arr[j-gap]
                j-=gap
            }
            arr[j]=temp 
        }
        gap=Math.floor(gap/2)
    }
    return arr
}

5.快速排序

function quickSort(arr){
    
    
    if(arr.length<=1){
    
     
        return arr
    }
    var povitIndex=Math.floor(arr.length/2)
    var povitIndexValue=arr.splice(povitIndex,1)
    var left=[]
    var right=[]
    for(var i=0;i<arr.length;i++){
    
    
        if(arr[i]<povitIndexValue){
    
    
            left.push(arr[i])
        }else{
    
    
            right.push(arr[i])
        }
    }
    return quickSort(left).concat(povitIndexValue,quickSort(right))
}

快排算法
6.归并排序

function merge(left,right){
    
    
    var res=[]
    while(left.length>0&&right.length>0){
    
    
        if(left[0]<right[0]){
    
    
            res.push(left.shift())
        }else{
    
    
            res.push(right.shift())
        }
    }
    return res.concat(left).concat(right)
}

function mergeSort(arr){
    
    
    if(arr.length==1){
    
    
        return arr
    }
    var index=Math.floor(arr.length/2)
    var left_arr=arr.slice(0,index)
    var right_arr=arr.slice(index)
    return merge(mergeSort(left_arr),mergeSort(right_arr))
}

归并算法

猜你喜欢

转载自blog.csdn.net/lyj223061/article/details/100181911