计算排序
先计算,后排序
扑克牌,按分类,放桌子,从最小,拿在手
思路:拿一副牌中,依次拿出牌,放在一个桌子上,按数字排放,如果是同样的牌,就叠加在一起,不同就另外放一个位置,最后,从最小的牌逐个叠加排列到手中即可完成排序
//计算
let arr = [10, 2, 1, 5, 8, 2, 5, 9, 15, 1, 2, 2, 5] //假设这是一副扑克牌
// index用于while循环
let index = 0
// 摆放扑克牌的桌子
let table = []
//依次拿出牌
while (index < arr.length) {
//看看是什么数字的排?
let number = arr[index]
//拿排放桌子,有两种情况:
//1. 如果桌子中没有相同数字的牌,就放上,+1
if (table[number] === undefined) {
table[number] = 1
//2. 如果盒子有相同数字的牌,就叠加
} else {
table[number] += 1
}
index++
}
console.log(table) //[empty, 2, 4, empty × 2, 3, empty × 2, 1, 1, 1, empty × 4, 1]
//排序
let hand = [] //拿牌的手
for (let i = 0; i < table.length; i++) {
//同样数字的排,如:4个3
let count = table[i]
if (count) {
//逐个添加到手中:i就是牌
for (let j = 0; j < count; j++) {
hand.push(i)
}
}
}
console.log(hand) // [1, 1, 2, 2, 2, 2, 5, 5, 5, 8, 9, 10, 15]
//执行逻辑:
//for循环:
//i = 0, table[i] = empty, empty不存在,执行下一个,i++
//i = 1, table[i] = 2,进入条件,hand push 两个 i,就是两个1进手中...