计数排序
1. 确定待排序整数的范围,找出最小值 min 和最大值 max。
2. 创建一个计数数组 count,长度为 max - min + 1,用于统计每个整数出现的次数。
3. 遍历待排序的整数数组,统计每个整数出现的次数,并将其存储在计数数组中相应的位置。
4. 根据计数数组中的统计信息,重构排序后的数组。
5. 返回排序后的数组。
package main
import "fmt"
func countSort(arr []int) {
// 先找到最大值、最小值
max := arr[0]
min := arr[0]
for _, v := range arr {
if v > max {
max = v
}
if v < min {
min = v
}
}
// 计数数组
count := make([]int, max-min+1)
// 统计出现的次数,v-min是因为数组下标从0开始
for _, v := range arr {
count[v-min]++
}
sortIdx := 0 // 排序后的数组下标
for i, _ := range count {
for count[i] > 0 {
arr[sortIdx] = i + min // 还原排序前的数组
sortIdx++
count[i]--
}
}
}
func main() {
arr := []int{4, 2, 3, 5, 4, 3, 2, 5, 6, 7, 6, 8, 2, 9, 4, 5, 7}
fmt.Println("Unsorted array:", arr)
countSort(arr)
fmt.Println("Sorted array:", arr)
}