Skip to content

版本号比较

作者:青见春山
发表于:2026-06-03
字数统计:362 字
预计阅读2分钟
js
/**
 * @param {string} version1
 * @param {string} version2
 * @return {number}
 */
var compareVersion = function (version1, version2) {
  const ver1 = version1.split(".");
  const ver2 = version2.split(".");
  const n = Math.max(ver1.length, ver2.length);
  //这里取大值,比如1.0.1和1.0
  //取小可以,但是要格外加相等判断,比如1.0.0和1.0其实是一样的
  //不能单凭min的相等,长的就更大这样
  for (let i = 0; i < n; i++) {
    const v1 = ver1[i] ? parseInt(ver1[i]) : 0;
    const v2 = ver2[i] ? parseInt(ver2[i]) : 0;
    if (v1 > v2) return 1;
    if (v1 < v2) return -1;
  }
  return 0;
};

字节生服三面第一道是上面这个的变式,版本号排序

js
// 版本号排序
const versions = ["1.0.1", "1.0", "2.0", "1.1", "1.0.0", "1.0.2"];

// 升序
versions.sort(compareVersion);
console.log(versions);
// 输出: ["1.0", "1.0.0", "1.0.1", "1.0.2", "1.1", "2.0"]

// 降序 此时调换参数顺序就能达到降序目的
versions.sort((a, b) => compareVersion(b, a));
console.log(versions);
// 输出: ["2.0", "1.1", "1.0.2", "1.0.1", "1.0.0", "1.0"]

sort 的工作原理

sort 方法根据比较函数返回的正负值来决定顺序:

  • 返回负数(< 0):a 排在 b 前面

  • 返回正数(> 0):b 排在 a 前面

  • 返回 0:位置不变

    sort时间复杂度

V8 引擎(Chrome、Node.js)

Timsort 算法(混合稳定排序): 快排

  • 最好情况:O(n) - 数组已经基本有序
  • 平均情况:O(n log n)
  • 最坏情况:O(n log n)