JS深入基础之Array.sort()的实现机制

3,891 阅读1分钟

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
}