版本号比较
发表于: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)
