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