迷糊版本:
function quickSort(arr){ var arrLen = arr.length; if(arrLen <= 1){ return arr } var pivotIndex = Math.floor(arrLen/2); var pivot = arr.splice(pivotIndex,1)[0]; var left = []; var right = []; for(var i=0;i<arrLen;i++){ if(arr[i]<pivot){ left.push(arr[i]) } else{ right.push(arr[i]) } } return quickSort(left).concat([pivot], quickSort(right)); } 正版: function quickSort(arr){ //如果数组<=1,则直接返回 if(arr.length<=1){return arr;} var pivotpivotIndex =Math.floor(arr.length/2); //找基准,并把基准从原数组删除 var pivot=arr.splice(pivotpivotIndex ,1)[0]; //定义左右数组 var left=[]; var right=[];
//比基准小的放在left,比基准大的放在right for(var i=0;i<arr.length;i++){ if(arr[i]<=pivot){ left.push(arr[i]); } else{ right.push(arr[i]); } } //递归 return quickSort(left).concat([pivot],quickSort(right)); } 区别:在进入函数时迷糊版缓存了数组的长度。导致每次都是使用这个长度,就会无限进入循环然后报错 注:不能缓存长度