JS数组排序的几个方法

5,414 阅读1分钟

一、冒泡排序

原理:

  1. 在一次循环中相邻的两个元素进行循环比较,如果前者大(小)于后者,则交换位置,这样做的结果就是第一次循环最大(小)的排到了最后;
  2. 重复这样的动作,重复多少次,由数组的长度决定,比如length为2,重复一次就行,length为3,就重复两次..依次类推,要重复length-1次;
    // 冒泡排序(从小到大)
    function sortArr (arr) {
        // 控制循环多少次
        for (let i = 0; i < arr.length-1; i++) {
            // 控制比较
            for (let j = 0; j < arr.length; j++) {
                // 一次循环中,如果前者大于后者就交换位置,所以第一次循环最大的就在最后
                if (arr[j] > arr[j+1]) {
                    // 交换位置
                    const element = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = element
                }
            }
        }
    }
    
    var arr = [9,3,10,6,2,8];
    sortArr(arr);
    console.log(arr)// ;[2,3,6,8,9,10]

二、使用sort方法

原理:

封装一个排序函数,然后将该函数当作参数传递给数组的sort方法;


    function sortArray(m,n) {
        if (m > n) {
            return 1
        } else if (m < n) {
            return -1
        } else {
            return 0
        }
    }
    var arr = [9,3,10,6,2,8];
    arr.sort(sortArray);// [2,3,6,8,9,10]

三、插入排序

原理:

对于一个数组,先从中取出第一个项形成新的数组,其后每次往新的数组中插入新的值,每次插完后都要进行排序,直到插完为止;

    
    // 插入排序
    function insertSort(arr) {
        let arr_new = [arr[0]];
        for (let i = 1; i < arr.length; i++) {
            // 插入多少次
            arr_new.push(arr[i]);
            // 排序只需要循环length-1次
            for (let j = 0;j < arr_new.length - 1;j++){
                // 每次插入要做的事情
                if (arr_new[arr_new.length-j-1] < arr_new[arr_new.length-j-2]){
                    // 交换位置
                    var arrTem = arr_new[arr_new.length-j-2];
                    arr_new[arr_new.length-j-2] = arr_new[arr_new.length-j-1];
                    arr_new[arr_new.length-j-1] = arrTem;
                }
            }
        }
        return arr_new
    }
    var arr = [9,3,10,6,8,10]
    console.log(insertSort(arr))