
白话计数排序核心原理确定数组元素的最大值和最小值统计范围内每个数值出现的次数再按数值从小到大依次回填数组。通俗步骤确定数组元素的最大值max和最小值min统计min到max范围内每个数字的频次按数值从小到大依次回填数组举例演示 [3,1,4,2]确定大小值范围min:1max:4统计频次11次21次31次41次依次回填[1,2,3,4]代码示例packagemainimportfmtfunccountingSort(arr[]int){iflen(arr)0{return}// 找最大、最小值min,max:arr[0],arr[0]for_,v:rangearr{ifvmin{minv}ifvmax{maxv}}// 初始化计数桶bucketLen:max-min1count:make([]int,bucketLen)// 统计次数for_,v:rangearr{count[v-min]}// 回填数组idx:0fori:0;ibucketLen;i{forcount[i]0{arr[idx]imin idxcount[i]--}}}funcmain(){arr:[]int{2,5,3,0,2,3,0,3}countingSort(arr)fmt.Println(arr)// [0 0 2 2 3 3 3 5]}局限性数值范围极大时统计频次会占用海量内存。