常见的几大排序,插入排序/选择排序/堆排序/快速排序
理解+重复默写
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 },
]);