六大排序算法的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))
}

归并算法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值