Array.sort()方法和实现机制
该排序方法每个浏览器中实现的都不太一样
chrome 目前采用快排(QuickSort)和插入排序(InsertaionSort),而对于火狐,它采用归并排序(MergeSort)。而IE使用快排。
那么接下来就分别解析一下 快速排序 插入排序和快速排序以及他们的复杂度问题
快速排序
大致的思路是以一个基准数为中心,左边存放比他小的,右边存放比他大的,然后递归直到只有一个元素。
function quickSort(arr){
if(arr.length<=1){return arr}// 别忘记递归的出口
var left = []
var right = []
var p_index = Math.floor(arr.length/2)
//一定要去掉已经作为基准数的p值,不然他会把自己又排进去,这样就乱套了。
var p = arr.splice(p_index, 1)[0]
for(var i =0 ;i<arr.length;i++){
if(arr[i]<p){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return quickSort(left).concat(p,quickSort(right))
}
插入排序
function insertSort(arr){
var index = 0
for(var i = 1;i<arr.length;i++){
index = i
for(var j = i-1;j>=0;j--){
if(arr[i]<arr[j]){
index = j
}
}
arr.splice(index,0,arr[i])
arr.splice(i+1,1)
}
return arr
}