js归并排序-快速排序-堆排序

前端面试经常遇到一个问题:有两个无序数组,用一个方法把他们合并且排序,嗯嗯,那么就concat然后归并吧

 function merge(left, right){
        let tmp = [];
        while(left.length && right.length){
            if(Number.parseInt(left[0])

能不用冒泡和插入排序尽量就不用了,因为复杂度都是n方,归并和快速都是nlogn,相对好一些
下面任然介绍一下快排:

function quicksort(arr){
        if(arr.length<=1) return arr;
        let judge = 0,left = [], right = [];
        judge = arr[Math.floor(arr.length/2)];
        arr.splice(Math.floor(arr.length/2),1);
        for(let i = 0; i+x);
        arr2 = arr2.map(x=>+x);
        var ele = document.getElementsByTagName('span')[0];
            console.log('start'+arr1+arr2);
        ele.innerHTML = quicksort(arr1.concat(arr2)).toString();
    }

提示:如果快速排序不把judge标志元素从数组中splice掉,会导致栈溢出
最后是堆排序,利用大顶堆进行1)构造堆 2)调整堆

function heap(arr, large, len) {
    var origin = large;
    var left = large*2 + 1;
    var right = left + 1;
    var temp = null;
    if(left=0;i--) {
        heap(arr, i, len);
console.log(arr,'666')
    }
    for(let i = len-1;i>0;i--) {
        res.push(arr);
        temp = arr[0];
        arr[0] = arr[i];
        arr[i] = temp;
        heap(arr, 0, i);
    }
    return arr;
}
sort([0,4,5,6,2,21,3,5,9])

你可能感兴趣的:(js归并排序-快速排序-堆排序)