5.算法-快速排序

//算法-快速排序
var cc=cc||console
function exchange(A,p1,p2){
    if(p1!=p2){
        var temp=A[p1]
        A[p1]=A[p2]
        A[p2]=temp
    }
}
function quicksort(A,p,r){
    if(p<r){
        var q=partition(A,p,r)
        quicksort(A,p,q-1)
        quicksort(A,q+1,r)
    }
}
function partition(A,l,r){
    //保存最后一个值
    var x=A[r]
    //左标
    var p=l-1
    for(var i=l;i<r;i++){
        if(A[i]<=x){
            p=p+1
            //交换插入
            exchange(A,p,i)
        }
    }
    exchange(A,p+1,r)
    return p+1
}
var arr=[15,1,34,3,23,12,45,56]
//quicksort(arr,0,arr.length-1)
//cc.log(arr)//=>[ 1, 3, 12, 15, 23, 34, 45, 56 ]
function randomized_partition(A,l,r){
    var p=0|Math.random()*(r-l)+l
    exchange(A,r,p)
    return partition(A,l,r)
}
//快速排序 随机化版本
function randomized_quicksort(A,l,r){
    if(l<r){
        var q=randomized_partition(A,l,r)
        randomized_quicksort(A,l,q-1)
        randomized_partition(A,q+1,r)
    }
}
randomized_quicksort(arr,0,arr.length-1)
cc.log(arr)

原文地址:https://www.cnblogs.com/caoke/p/4389754.html