js快排

快排的思路:选定一个基准数,要使得基数的左边的数字全部小于它,右边的数字全部大于它。分别设i和j从左右开始寻找,从左边找到第一个比基数大的数,从右边找到第一个比基数小的数,然后交换这两个数。

当i和j相遇时,交换基数和i。再以同样的方式处理两边的数组。注意:如果基数取的是a[0]那么一定是先从右边开始找,因为搜索的停止条件除了,找到比基数大或比基数小的数之外,还有i<j这个判断。因为最后基数a[0]要 

和i交换位置,而a[0]是在数组的最左边,所以i==j时,这个位置上的数应该比a[0]小,如果先从左边开始,那么会造成这个数比a[0]大(仔细想想就明白了)

        const quickSort = (arr,s,e)=>{
            if(arr.length<=1) return 
            if(s>=e) return 
            let p = arr[s] 
            let i = s 
            let j = e 
            while(i!=j){

                while(arr[j]>=p&&i<j){
                    j-- 
                }

                while(arr[i]<=p&&i<j){
                    i++ 
                }

                if(i<j){
                    let temp = arr[i] 
                    arr[i] = arr[j] 
                    arr[j] = temp 
                }
            }
            arr[s] = arr[i] 
            arr[i] = p 
            quickSort(arr,s,i-1) 
            quickSort(arr,i+1,e) 
        }
        var arr = [6, 1, 2, 7, 9, 3, 4, 5, 10, 8]
        quickSort(arr,0,arr.length-1)
        console.log(arr)

 

posted @ 2018-07-31 09:24  mask_天俊  阅读(308)  评论(0编辑  收藏  举报