js中实现快速排序
快排的实现利用了二分查找法;
二分法是通过与中间值进行比较,每次缩小一半的区域;
快速类似于二分法,每次都在数组中选择一个基数,每一轮结束后,比该基数小的都位于该基数的左边,比该基数大的位于右边。然后再分别在左边的数组里,里面选一个基点和基点值,右边选择基点和基点值,这里就是用递归。
function quickSort(arr) { if (arr.length<=1){ return arr; } var baseIndex= Math.floor(arr.length/2);//向下取整,选取基准点 var base=arr.splice(baseIndex,1)[0];//取出基准点的值, // splice 通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。 // slice方法返回一个新的数组对象,不会更改原数组 //这里不能直接base=arr[baseIndex],因为base代表的每次都删除的那个数 var left=[]; var right=[]; for (var i = 0;i<arr.length;i++){ // 这里的length是变化的,因为splice会改变原数组。 if (arr[i]<base){ left.push(arr[i]);//比基准点小的放在左边数组, } }else{ right.push(arr[i]);//比基准点大的放在右边数组, } return quickSort(left).concat([base],quickSort(right));