快速排序
思想:
1、找到一个基准点
2、建立两个数据,分别存放左边和右边的数组
3、利用递归的原理进行比较
arr = [1,6,3,4,5]
步骤 : 1,6,3,4,5
1,3,6,4,5
1,3,4,6,5
1,3,4,5,6
<script type="text/javascript"> var arr = [1,6,3,4,5]; alert(quickSort(arr)); function quickSort(arr) { if (arr.length<=1) return arr; var middleIndex = Math.floor(arr.length/2); var middleNum = arr.splice(middleIndex,1); var left = []; var right = []; for (var i=0,len=arr.length;i<len;i++) { if (arr[i]<middleNum) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([middleNum],quickSort(right)); } </script>
注意:
1、if (arr.length<=1) return arr; 必须在arr.splice(middleIndex,1)前面,如果在后面会有问题,执行arr.splice(middleIndex,1)会影响arr的值,再返回arr值不对。
2、if (arr.length<=1) return arr;必须是<=,如果改成==,会有问题,因为有可能在排序的时候,出现left或者right为空数组的情况(见:步骤3,这时left为空数组),空数组长度0,这时判断不成立,程序会报错了。
参考:http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html