js 排序应用场景-面试相关

32 阅读1分钟

常见的几大排序,插入排序/选择排序/堆排序/快速排序

理解+重复默写

function insertSort(arr) {
    for(let i=1;i<arr.length;i++) {
        let j=i
        while(j >0 && arr[j-1] > arr[j]) {
            swap(arr,j-1,j)
            j--
        }
    }
}
function swap(arr,i,j) {
    let tmp = arr[i]
    arr[i] = arr[j]
    arr[j] = tmp
}

比较版本号

// 返回规则如下:
// 如果 version1 > version2 返回 1,
// 如果 version1 < version2 返回 -1,
// 除此之外返回 0。
var compareVersion = function (v1, v2) {
  v1 = v1.split('.');
  v2 = v2.split('.');
  let len = Math.max(v1.length, v2.length);
  let i = 0;
  while (i < len) {
    let cu1 = +v1[i] || 0;
    let cu2 = +v2[i] || 0;
    if (cu1 > cu2) {
      return 1;
    } else if (cu1 < cu2) {
      return -1;
    } else if (cu1 == cu2) {
      i++;
    }
  }
  return 0;
};
compareVersion('0.1','1.1')

对版本号进行排序

// 输入:versions = ['0.1.1', '2.3.3', '0.302.1', '4.2', '4.3.5', '4.3.4.5']
// 输出:['0.1.1', '0.302.1', '2.3.3', '4.3.4.5', '4.3.5']

function compare(nums) {
  return nums.sort((a, b) => {
    let a1 = a.split('.');
    let b1 = b.split('.');
    let len = Math.max(a1.length, b1.length);
    for (let i = 0; i < len; i++) {
      let cu1 = +a1[i] || 0;
      let cu2 = +b1[i] || 0;
      if (cu1 > cu2) {
        return 1;
      } else if (cu1 < cu2) {
        return -1;
      } else {
        continue; // 这一步很关键
      }
    }
    return 0;
  });
}
compare(['1.0', '1.0.1', '1.1', '1.2.0.1']);

对数组的某两个属性依次进行降序或者升序,

比如对数组的price和size依次进行降序排列

function sortNums(nums) {
  return nums.sort((a, b) => {
    if (a.price != b.price) {
      return b.price - a.price;
    } else {
      return b.size - a.size;
    }
  });
}
sortNums([
  { price: 1, size: 2 },
  { price: 2, size: 2 },
  { price: 1, size: 1 },
]);