Aha! Algorithms - Bucket Sort
2017-03-16 本文已影响0人
su3
《啊哈!算法》第 1 章第 1 节,桶排序的 Swift 实现
问题
班上 5 个同学的考试成绩分别为:5 分,3 分,5 分,2 分和 8 分,满分是 10 分。要求将分数从大到小排序
解决
准备 10 个桶,遍历分数,每出现一个分数,就在对应编号的桶里插一面小旗子,最后遍历所有桶,打印有小旗子的桶的编号
let bucketCount = 10 //桶的个数
let numbers = [5, 3, 5, 2, 8] //待排序的数组
var book: [Int: Int] = [:]
//初始化桶
for i in 1...bucketCount {
book[i] = 0
}
//遍历数组
for item in numbers {
let count = book[item]!
book[item] = count + 1 //计数,放入编号为 item 的桶
}
//依次判断所有桶
for i in (1...bucketCount).reversed(){
let count = book[i]!
if count == 0 {
continue
}
//出现几次就将桶的编号打印几次
for j in 1...count {
print("\(i)")
}
}
算法的时间复杂度是 O(m+n+m+n) = O(M+N)。
代码在 GitHub