js快速排序笔记
冒泡和快速排序
这两种排序方式是最常见也是面试最容易提及到的内容,这里做个比较加以理解
-
冒泡排序就是一遍一遍循环N*N次比较这里不做详解
-
快速排序就是取一个数组的中间值,然后小于的放左边,大于的放右边,然后递归quickSort(left).concat(mid,quickSort(right));
var arr =[2,9,0,4,4,6,3,8,10,2,6,4];
arr = quickSort(arr)//这个必须重新赋值给arr,否则在下面标红的地方改变了原来的数组,直接取arr会是未排序且删除掉中间值的一个数组。 function quickSort(arr){ if(arr.length<=1){//长度小于等于1的直接返回数组 return arr; } var mid = Math.floor(arr.length/2); mid = arr.splice(mid,1)[0];//提取中间值(arr原来数组会去掉mid这个值,并且返回mid位置的值) var left=[],right=[]; for(var i=0;imid){ right.push(arr[i]); } } return quickSort(left).concat(mid,quickSort(right));//数组拼接 }
注意:特别注意代码块当中标红的地方mid = arr.splice(mid,1)[0];。必须重新赋值给新的数组,不能使用原来的引用