例题1.5 快速排序

题目

输入数组为a[p:r],通过排序算法使其有序。

思路

(1)划分,取出x=a[p]为基准将a[p:r]划分为3:a[p:q-1],a[q],a[q+1:r],使a[p:q-1]中任一元素<=a[q], a[q]<=a[q+1:r]

(2)递归调用 ,对a[p:q-1]和a[q+1:r]进行同样的操作

function swap(a,i,j){
    var temp=a[i]
    a[i]=a[j]
    a[j]=temp
}
var a=[10,2,32,4,5,6,7,8,5,9,4,3,12,12]
function partition(a,p,r){
    var i=p
    var j= r+1
    var x=a[p]
    while(true){
        while(a[++i]<x);
        while(a[--j]>x);

        if(i>=j){
            break
        }
        swap(a,i,j)
    }
    swap(a,p,j)
    return j
}
function quickSort(a,p,r){
    if(p<r){
        var q=partition(a,p,r)
        quickSort(a,p,q-1)
        quickSort(a,q+1,r)
    }
}
quickSort(a,0, a.length-1)
console.log(a)

  

posted @ 2016-10-18 17:56  巅峰蜗牛  阅读(951)  评论(0编辑  收藏  举报