js各种排序汇总

来源:互联网 发布:深圳旅游知乎 编辑:程序博客网 时间:2024/06/03 11:29

js排序汇总

//排序1    function sort1(arr){        for(var i=1;i<arr.length;i++){            for(var j=0;j<arr.length-1;j++){                if(arr[i]<arr[j]){                    var temp;                    temp=arr[i];                    arr[i]=arr[j];                    arr[j]=temp;                }            }        }        arr.push();//        console.log(arr);    }
//    冒泡排序    function sort2(arr){        for(var i=0;i<arr.length;i++){            for(var j=arr.length-1;j>0;j--){                if(arr[j]<arr[j-1]){                    var temp=arr[j];                    arr[j]=arr[j-1];                    arr[j-1]=temp;                }            }        }        arr.push();        console.log(typeof(arr));//object        console.log(arr);    }    sort1([32,15,56,78,2]);//Array [ 2, 15, 32, 56, 78 ]    sort2([32,15,56,78,1]);
//    排序函数    function compare2(num1,num2){        return num1-num2;//从小到大    }    var nums=[0,15,5,10,3,156,30];    nums.sort(compare2);    console.log(nums);
// 快速排序1    var quickSort = function(arr) {        if (arr.length <= 1) {            return arr; }        var pivotIndex = Math.floor(arr.length/2);        var pivot = arr.splice(pivotIndex,1);      // alert(pivot);        var left = [];        var right = [];        for (var i = 0; i < arr.length; i++){            if (arr[i] < pivot) {                left.push(arr[i]);            } else {                right.push(arr[i]);            }        }//        递归    return quickSort(left).concat([pivot], quickSort(right));    };  console.log(quickSort([32,15,56,78,1,96,36]));
    //JS实现快速排序(从小到大排列)        Array.prototype.quickSort = function() {            quickSortHelper(this, 0, this.length-1);            //确定哨兵, 递归分离            function quickSortHelper(arr, start, end) {                if(start < end){                //快排结束条件start>=end                    //获取哨兵的位置                    var part = partation(arr, start, end);                    //根据递归实现排序                    arguments.callee(arr, start, part-1);                    arguments.callee(arr, part+1, end);                }            }            function partation(arr, start, end) {                var pivot = arr[end];              //设置哨兵                var i = start;                      //交换的次数+1 哨兵要在数组插入的位置                for(var j=start; j<end; j++) {                    if(arr[j] < pivot) {                        swap(arr, i, j);                        i++;                    }                }                swap(arr, i, end);                return i;            }            //交换数组元素的值            function swap(arr, i, j) {                var temp = arr[i];                arr[i] = arr[j];                arr[j] = temp;            }        };    //------------------- test ------    var arr = [5, 2, 3, 1, 4];    arr.quickSort();    console.log(arr);
    //--------------直接插入排序-----    function inSort(arr){        for(var i=1;i<arr.length;i++){            var x=arr[i];            for(var j=i-1;j>-1;j--){                if(arr[j]>x) arr[j+1]=arr[j];                else break;            }            arr[j+1]=x;        }        console.log(arr);    }    inSort([32,15,56,78,1,8]);
//--------------------选择排序------    function selectSort(arr){        for(var i=0;i<arr.length-1;i++){            var min=i;            for(var j=i+1;j<arr.length;j++){                if(arr[j]<arr[min]){                    min=j;                }                if(i-min){                    var temp=arr[min];                    arr[min]=arr[i];                    arr[i]=temp;                }            }        }        console.log(arr);    }    selectSort([3,2,5,8,4,7,6,9]);
    //------归并排序------    function mergeSort(items) {        if (items.length < 2) {            return items;        }        var middle = Math.floor(items.length / 2),            left = items.slice(0, middle),            right = items.slice(middle),            params = merge(mergeSort(left), mergeSort(right));            params.unshift(0, items.length);        console.log(params);//        return sum1.apply(this,[num1,num2]);            items.splice.apply(items, params);        console.log(items);        return items;        function merge(left, right) {            var result = [],                    il = 0,                    ir = 0;            while (il < left.length && ir < right.length) {                if (left[il] < right[ir]) {                    result.push(left[il++]);                } else {                    result.push(right[ir++]);                }            }            return result.concat(left.slice(il)) .concat(right.slice(ir));        }    }    // test    var arrT = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];    console.log(mergeSort(arrT));

原创粉丝点击