快速排序

  快排的思路:找到一个基准数,把大于基准数的数字放在基准数的右边部分,小于基准数的放在左边部分;排完后,再对左边部分和右边部分分别进行上述操作,递归下去,直到子序只剩下一个数字。

  其中快排的时间复杂度为O(nlogn),空间复杂度为O(nlogn),但算法相对不稳定。

function quicksort(arr,left,right) {
    var i = left;
    var j = right;
    var temp = arr[left];    //保存基准数
    if(left>=right) return ;
    while(i!=j){
        while(i<j&&arr[j]>=temp){
            j--;
        }
        if(i<j){
            arr[i]=arr[j];
        }
        while(i<j&&arr[i]<=temp){
            i++;
        }
        if(i<j){
            arr[j]=arr[i];
        }
    }
    arr[i]=temp;
    quicksort(arr,left,i-1);
    quicksort(arr,i+1,right);
}
var arr = [8,2,6,12,1,9,5,5,10];
quicksort(arr,0,8);
alert(arr);    

 

posted on 2018-09-17 10:53  大黑ylx  阅读(122)  评论(0编辑  收藏  举报