1.快速排序
// 快速排序 每轮排序都能将最大的数字放到最后
function sortFun(nums: number[]) {
let temp: number = 0
// 第一层代表循环的位置
for (let i = 0; i < nums.length - 1; i++) {
// 每次循环实时比较的场景
for (let j = 0; j < nums.length - 1 - i; j++) {
if (nums[j] > nums[j + 1]) {
temp = nums[j]
nums[j] = nums[j + 1]
nums[j + 1] = temp
}
}
}
return nums
}
const nums = [1, 1, 2, 1, 2, 3];
console.log(sortFun(nums));
2.插入排序
// 插入排序 类比 抽扑克牌, 每次抽牌都和手牌比较,从手牌的右边依次和抽到的牌比较,
// 如果抽到的牌比手牌大就放在当前比较项的右边,
// 如果手上的牌都比抽到的大时候,放在手牌的第一个位置
function insert(nums: number[]) {
// 手上的牌
const hand = [nums[0]];
for (let i = 1; i < nums.length; i++) {
// 抽到的牌
const acquire = nums[i];
for (let j = hand.length - 1; j >= 0; j--) {
// 需要比较的手牌
const handCompare = hand[j];
// 如果抽到的牌比手中的牌大,就把抽到的牌放在当前比较的牌的右边
if (acquire > handCompare) {
hand.splice(j + 1, 0, acquire);
break;
}
if (j === 0) {
hand.unshift(acquire);
}
}
}
return hand;
}
const nums = [1, 1, 2, 1, 2, 3];
console.log(insert(nums));