Aha! Algorithms - Bucket Sort

《啊哈!算法》第 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

你可能感兴趣的:(Aha! Algorithms - Bucket Sort)