package main
import (
"fmt"
"math"
)
func countingSort(arr []int, k int) []int {
resArr := make([]int, len(arr))
tempArr := make([]int, k+1)
for j := 0; j<len(arr); j++ {
tempArr[arr[j]] += 1
}
for i := 1; i<=k; i++ {
tempArr[i] += tempArr[i-1]
}
for j := len(arr)-1; j>=0; j-- {
resArr[tempArr[arr[j]]-1] = arr[j] //注意这里的减一 resArr从0开始 与伪代码不同
tempArr[arr[j]] --
}
return resArr
}
// func max return the max number of arr
func max(arr []int) int {
maxNum := (-1) * math.MaxInt8
for i := 0; i<len(arr); i++ {
if arr[i]>maxNum {
maxNum = arr[i]
}
}
return maxNum
}
func main() {
arr := []int{1,3,1,2,4,4,5,9,0,0}
k := max(arr)
// B := make([]int, len(arr))
// countingSort(arr, B, k)
res := countingSort(arr, k)
fmt.Println(res)
}