JS排序

作者: 深情的白杨 | 来源:发表于2019-11-14 14:53 被阅读0次

    前提

    let arr = [1,7,9,10,0];
    let personArr = [
      {
        ename: 'huge', 
        age: 10
      }, 
      {
        ename: 'zhang', 
        age: 12
      }, 
      {
        ename: 'li',
        age: 9
      }
    ];
    let len = arr.length;
    

    1、冒泡

    for (let i = 0; i < len; i++) {
      for (let j = 0; j < len - i; j++) {
          if (arr[j] > arr[j+1]) {
             [arr[j+1], arr[j]] = [arr[j], arr[j+1]];
          }
      }
    }
    

    使用ES6结构交换变量

    2、sort

    1.1、对待数字的正序倒序排列

    arr.sort((a,b) => {
      return a-b; // 正序排列 b-a倒序排列
    });
    

    直接可以更改到arr数组,不仅如此,sort也有更强大的作用

    2.2、实现按照年龄属性正序倒序排列

    personArr.sort((a,b) => {
      return b.age - a.age; // a.age-b.age到序
    });
    

    2.3、首字母正序倒序排列

    personArr.sort((a,b) => {
        let letter1 = a.name[0];
        let letter2 = b.name[0];
        return letter1.charCodeAt() - letter2.charCodeAt(); // 正序,反之倒序
    });
    

    2.4、扩展-随机排序

    arr.sort(() => {
      return 0.5-Math.random();
    });
    

    sort的原理也是冒泡排序,条件是return后面的值,为正:正序,为负:倒序,也可以为0:不排序;也可以设置有条件的排序,比如,id一致的时候按照年龄排序。

    3、快排

    function quickSort (arr) {
      if (arr.length < 2) {
        return arr;
      }
      let left = [], right = [];
      let centerIndex = Math.floor( arr.length / 2 );
      let centerVal = arr.splice( centerIndex, 1 );
      for (let i = 0; i < arr.length; i++) {
        if (arr[i] < centerVal) {
          left.push(arr[i]);
        } else {
          right.push(arr[i]);
        }
      }
      return quickSort(left).concat(centerVal, quickSort(right));
    }
    

    4、选择排序

    function selectSort (arr) {
        let minIndex;
        for(let i = 0; i < arr.length - 1; i++) {
            minIndex = i;
            for (let j = i+1; j < arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            // 交换 i 与 minIndex的值
            [arr[minIndex], arr[i]] = [arr[i], arr[minIndex]];
        }
        return arr;
    }
    

    相关文章

      网友评论

          本文标题:JS排序

          本文链接:https://www.haomeiwen.com/subject/mbohictx.html