快排的思路:选定一个基准数,要使得基数的左边的数字全部小于它,右边的数字全部大于它。分别设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)