JS排序

113 阅读1分钟

一、快速排序

采用二分法,取出中间数,数组每次和中间数比较,小的放到左边,大的放到右边.算法平均复杂度:n(n log n)

    var arr = [2,3,4,1,3,4,5,6,7,5,3];
    function quickSort(arr){
        if(arr.length==0){
            return [];
        }
        var cIndex = Math.floor(arr.length / 2);
        var c = arr.splice(cIndex,1);
        var l = [];
        var r = [];
        for(var i = 0;i<arr.length;i++){
            if(arr[i] <c){
                l.push(arr[i]);
            } else {
                r.push(arr[i]);
            }
        }
    }

二、冒泡排序

每次比较相邻的两个数,如果一个比前一个小,换位置.算法平均复杂度:n(n^2)

    var arr = [3,1,2,3,4,4,5];
    function bubbleSOrt() {
        for(var i = 0;i<arr.length-1;i++){
            for(j=0;j<arr.length - 1;j++){
                if(arr[j+1]<arr[j]){
                    var temp;
                    temp= arr[i];
                    arr[i] = arr[j+1];
                    arr[j+1] = temp
                }
            }
        }
        return arr;
    }

三、选择排序

从所有记录中选出最小的一个数据元素与第一个位置的记录交换,然后在剩下的记录当中再找最小的与第二个位置的记录交换,循环到只剩下最后一个数据元素为止 复杂度n(n^2)

    function selection_sort(arr){
        var minIndex
        var temp
        var len = arr.length
        for(var i = 0;i<len;i++){
            minIndex = i;
            for(var j=i+1;j<len;j++) {
                if(arr[i]<arr[minIndex]){
                    minIndex = j
                }
            }
        }
    }

四、sort函数

用sort()为数组排序,

let arr = ['A','B','C','D']
arr.sort()
console.log(arr)

sort方法会调用每个数组项的toString()方法,得到字符串,然后再对得到的字符串进行排序

let arr = [15,8,25,3] 
arr.sort((x,y)=> x - y) // 正序
console.log(arr) // [3,8,15,25]
arr.sort((x,y)=> y - x) // 倒序