@ -1794,7 +1794,30 @@
< / code > < / pre > < / div >
< / div >
< div class = "tabbed-block" >
< div class = "highlight" > < span class = "filename" > counting_sort.go< / span > < pre > < span > < / span > < code > < a id = "__codelineno-3-1" name = "__codelineno-3-1" href = "#__codelineno-3-1" > < / a > < span class = "p" > [< / span > < span class = "nx" > class< / span > < span class = "p" > ]{}< / span > < span class = "o" > -< / span > < span class = "p" > [< / span > < span class = "kd" > func< / span > < span class = "p" > ]{< / span > < span class = "nx" > countingSortNaive< / span > < span class = "p" > }< / span >
< div class = "highlight" > < span class = "filename" > counting_sort.go< / span > < pre > < span > < / span > < code > < a id = "__codelineno-3-1" name = "__codelineno-3-1" href = "#__codelineno-3-1" > < / a > < span class = "cm" > /* 计数排序 */< / span >
< a id = "__codelineno-3-2" name = "__codelineno-3-2" href = "#__codelineno-3-2" > < / a > < span class = "c1" > // 简单实现,无法用于排序对象< / span >
< a id = "__codelineno-3-3" name = "__codelineno-3-3" href = "#__codelineno-3-3" > < / a > < span class = "kd" > func< / span > < span class = "w" > < / span > < span class = "nx" > countingSortNaive< / span > < span class = "p" > (< / span > < span class = "nx" > nums< / span > < span class = "w" > < / span > < span class = "p" > []< / span > < span class = "kt" > int< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-3-4" name = "__codelineno-3-4" href = "#__codelineno-3-4" > < / a > < span class = "w" > < / span > < span class = "c1" > // 1. 统计数组最大元素 m< / span >
< a id = "__codelineno-3-5" name = "__codelineno-3-5" href = "#__codelineno-3-5" > < / a > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "mi" > 0< / span >
< a id = "__codelineno-3-6" name = "__codelineno-3-6" href = "#__codelineno-3-6" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > num< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "k" > range< / span > < span class = "w" > < / span > < span class = "nx" > nums< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-3-7" name = "__codelineno-3-7" href = "#__codelineno-3-7" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > num< / span > < span class = "w" > < / span > < span class = "p" > > < / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-3-8" name = "__codelineno-3-8" href = "#__codelineno-3-8" > < / a > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "w" > < / span > < span class = "p" > =< / span > < span class = "w" > < / span > < span class = "nx" > num< / span >
< a id = "__codelineno-3-9" name = "__codelineno-3-9" href = "#__codelineno-3-9" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-3-10" name = "__codelineno-3-10" href = "#__codelineno-3-10" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-3-11" name = "__codelineno-3-11" href = "#__codelineno-3-11" > < / a > < span class = "w" > < / span > < span class = "c1" > // 2. 统计各数字的出现次数< / span >
< a id = "__codelineno-3-12" name = "__codelineno-3-12" href = "#__codelineno-3-12" > < / a > < span class = "w" > < / span > < span class = "c1" > // counter[num] 代表 num 的出现次数< / span >
< a id = "__codelineno-3-13" name = "__codelineno-3-13" href = "#__codelineno-3-13" > < / a > < span class = "w" > < / span > < span class = "nx" > counter< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "nb" > make< / span > < span class = "p" > ([]< / span > < span class = "kt" > int< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span > < span class = "p" > )< / span >
< a id = "__codelineno-3-14" name = "__codelineno-3-14" href = "#__codelineno-3-14" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > _< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > num< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "k" > range< / span > < span class = "w" > < / span > < span class = "nx" > nums< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-3-15" name = "__codelineno-3-15" href = "#__codelineno-3-15" > < / a > < span class = "w" > < / span > < span class = "nx" > counter< / span > < span class = "p" > [< / span > < span class = "nx" > num< / span > < span class = "p" > ]< / span > < span class = "o" > ++< / span >
< a id = "__codelineno-3-16" name = "__codelineno-3-16" href = "#__codelineno-3-16" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-3-17" name = "__codelineno-3-17" href = "#__codelineno-3-17" > < / a > < span class = "w" > < / span > < span class = "c1" > // 3. 遍历 counter ,将各元素填入原数组 nums< / span >
< a id = "__codelineno-3-18" name = "__codelineno-3-18" href = "#__codelineno-3-18" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > num< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "mi" > 0< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "mi" > 0< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "nx" > num< / span > < span class = "w" > < / span > < span class = "p" > < < / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "nx" > num< / span > < span class = "o" > ++< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-3-19" name = "__codelineno-3-19" href = "#__codelineno-3-19" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > j< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "mi" > 0< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "nx" > j< / span > < span class = "w" > < / span > < span class = "p" > < < / span > < span class = "w" > < / span > < span class = "nx" > counter< / span > < span class = "p" > [< / span > < span class = "nx" > num< / span > < span class = "p" > ];< / span > < span class = "w" > < / span > < span class = "nx" > j< / span > < span class = "o" > ++< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-3-20" name = "__codelineno-3-20" href = "#__codelineno-3-20" > < / a > < span class = "w" > < / span > < span class = "nx" > nums< / span > < span class = "p" > [< / span > < span class = "nx" > i< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "p" > =< / span > < span class = "w" > < / span > < span class = "nx" > num< / span >
< a id = "__codelineno-3-21" name = "__codelineno-3-21" href = "#__codelineno-3-21" > < / a > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "o" > ++< / span >
< a id = "__codelineno-3-22" name = "__codelineno-3-22" href = "#__codelineno-3-22" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-3-23" name = "__codelineno-3-23" href = "#__codelineno-3-23" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-3-24" name = "__codelineno-3-24" href = "#__codelineno-3-24" > < / a > < span class = "p" > }< / span >
< / code > < / pre > < / div >
< / div >
< div class = "tabbed-block" >
@ -1911,7 +1934,41 @@
< / code > < / pre > < / div >
< / div >
< div class = "tabbed-block" >
< div class = "highlight" > < span class = "filename" > counting_sort.go< / span > < pre > < span > < / span > < code > < a id = "__codelineno-13-1" name = "__codelineno-13-1" href = "#__codelineno-13-1" > < / a > < span class = "p" > [< / span > < span class = "nx" > class< / span > < span class = "p" > ]{}< / span > < span class = "o" > -< / span > < span class = "p" > [< / span > < span class = "kd" > func< / span > < span class = "p" > ]{< / span > < span class = "nx" > countingSort< / span > < span class = "p" > }< / span >
< div class = "highlight" > < span class = "filename" > counting_sort.go< / span > < pre > < span > < / span > < code > < a id = "__codelineno-13-1" name = "__codelineno-13-1" href = "#__codelineno-13-1" > < / a > < span class = "cm" > /* 计数排序 */< / span >
< a id = "__codelineno-13-2" name = "__codelineno-13-2" href = "#__codelineno-13-2" > < / a > < span class = "c1" > // 完整实现,可排序对象,并且是稳定排序< / span >
< a id = "__codelineno-13-3" name = "__codelineno-13-3" href = "#__codelineno-13-3" > < / a > < span class = "kd" > func< / span > < span class = "w" > < / span > < span class = "nx" > countingSort< / span > < span class = "p" > (< / span > < span class = "nx" > nums< / span > < span class = "w" > < / span > < span class = "p" > []< / span > < span class = "kt" > int< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-13-4" name = "__codelineno-13-4" href = "#__codelineno-13-4" > < / a > < span class = "w" > < / span > < span class = "c1" > // 1. 统计数组最大元素 m< / span >
< a id = "__codelineno-13-5" name = "__codelineno-13-5" href = "#__codelineno-13-5" > < / a > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "mi" > 0< / span >
< a id = "__codelineno-13-6" name = "__codelineno-13-6" href = "#__codelineno-13-6" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > num< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "k" > range< / span > < span class = "w" > < / span > < span class = "nx" > nums< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-13-7" name = "__codelineno-13-7" href = "#__codelineno-13-7" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > num< / span > < span class = "w" > < / span > < span class = "p" > > < / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-13-8" name = "__codelineno-13-8" href = "#__codelineno-13-8" > < / a > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "w" > < / span > < span class = "p" > =< / span > < span class = "w" > < / span > < span class = "nx" > num< / span >
< a id = "__codelineno-13-9" name = "__codelineno-13-9" href = "#__codelineno-13-9" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-13-10" name = "__codelineno-13-10" href = "#__codelineno-13-10" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-13-11" name = "__codelineno-13-11" href = "#__codelineno-13-11" > < / a > < span class = "w" > < / span > < span class = "c1" > // 2. 统计各数字的出现次数< / span >
< a id = "__codelineno-13-12" name = "__codelineno-13-12" href = "#__codelineno-13-12" > < / a > < span class = "w" > < / span > < span class = "c1" > // counter[num] 代表 num 的出现次数< / span >
< a id = "__codelineno-13-13" name = "__codelineno-13-13" href = "#__codelineno-13-13" > < / a > < span class = "w" > < / span > < span class = "nx" > counter< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "nb" > make< / span > < span class = "p" > ([]< / span > < span class = "kt" > int< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span > < span class = "p" > )< / span >
< a id = "__codelineno-13-14" name = "__codelineno-13-14" href = "#__codelineno-13-14" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > _< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > num< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "k" > range< / span > < span class = "w" > < / span > < span class = "nx" > nums< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-13-15" name = "__codelineno-13-15" href = "#__codelineno-13-15" > < / a > < span class = "w" > < / span > < span class = "nx" > counter< / span > < span class = "p" > [< / span > < span class = "nx" > num< / span > < span class = "p" > ]< / span > < span class = "o" > ++< / span >
< a id = "__codelineno-13-16" name = "__codelineno-13-16" href = "#__codelineno-13-16" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-13-17" name = "__codelineno-13-17" href = "#__codelineno-13-17" > < / a > < span class = "w" > < / span > < span class = "c1" > // 3. 求 counter 的前缀和,将“出现次数”转换为“尾索引”< / span >
< a id = "__codelineno-13-18" name = "__codelineno-13-18" href = "#__codelineno-13-18" > < / a > < span class = "w" > < / span > < span class = "c1" > // 即 counter[num]-1 是 num 在 res 中最后一次出现的索引< / span >
< a id = "__codelineno-13-19" name = "__codelineno-13-19" href = "#__codelineno-13-19" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "mi" > 0< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "w" > < / span > < span class = "p" > < < / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "o" > ++< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-13-20" name = "__codelineno-13-20" href = "#__codelineno-13-20" > < / a > < span class = "w" > < / span > < span class = "nx" > counter< / span > < span class = "p" > [< / span > < span class = "nx" > i< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > +=< / span > < span class = "w" > < / span > < span class = "nx" > counter< / span > < span class = "p" > [< / span > < span class = "nx" > i< / span > < span class = "p" > ]< / span >
< a id = "__codelineno-13-21" name = "__codelineno-13-21" href = "#__codelineno-13-21" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-13-22" name = "__codelineno-13-22" href = "#__codelineno-13-22" > < / a > < span class = "w" > < / span > < span class = "c1" > // 4. 倒序遍历 nums ,将各元素填入结果数组 res< / span >
< a id = "__codelineno-13-23" name = "__codelineno-13-23" href = "#__codelineno-13-23" > < / a > < span class = "w" > < / span > < span class = "c1" > // 初始化数组 res 用于记录结果< / span >
< a id = "__codelineno-13-24" name = "__codelineno-13-24" href = "#__codelineno-13-24" > < / a > < span class = "w" > < / span > < span class = "nx" > n< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "nx" > nums< / span > < span class = "p" > )< / span >
< a id = "__codelineno-13-25" name = "__codelineno-13-25" href = "#__codelineno-13-25" > < / a > < span class = "w" > < / span > < span class = "nx" > res< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "nb" > make< / span > < span class = "p" > ([]< / span > < span class = "kt" > int< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > n< / span > < span class = "p" > )< / span >
< a id = "__codelineno-13-26" name = "__codelineno-13-26" href = "#__codelineno-13-26" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "nx" > n< / span > < span class = "w" > < / span > < span class = "o" > -< / span > < span class = "w" > < / span > < span class = "mi" > 1< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "w" > < / span > < span class = "o" > > =< / span > < span class = "w" > < / span > < span class = "mi" > 0< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "o" > --< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-13-27" name = "__codelineno-13-27" href = "#__codelineno-13-27" > < / a > < span class = "w" > < / span > < span class = "nx" > num< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "nx" > nums< / span > < span class = "p" > [< / span > < span class = "nx" > i< / span > < span class = "p" > ]< / span >
< a id = "__codelineno-13-28" name = "__codelineno-13-28" href = "#__codelineno-13-28" > < / a > < span class = "w" > < / span > < span class = "c1" > // 将 num 放置到对应索引处< / span >
< a id = "__codelineno-13-29" name = "__codelineno-13-29" href = "#__codelineno-13-29" > < / a > < span class = "w" > < / span > < span class = "nx" > res< / span > < span class = "p" > [< / span > < span class = "nx" > counter< / span > < span class = "p" > [< / span > < span class = "nx" > num< / span > < span class = "p" > ]< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "p" > =< / span > < span class = "w" > < / span > < span class = "nx" > num< / span >
< a id = "__codelineno-13-30" name = "__codelineno-13-30" href = "#__codelineno-13-30" > < / a > < span class = "w" > < / span > < span class = "c1" > // 令前缀和自减 1 ,得到下次放置 num 的索引< / span >
< a id = "__codelineno-13-31" name = "__codelineno-13-31" href = "#__codelineno-13-31" > < / a > < span class = "w" > < / span > < span class = "nx" > counter< / span > < span class = "p" > [< / span > < span class = "nx" > num< / span > < span class = "p" > ]< / span > < span class = "o" > --< / span >
< a id = "__codelineno-13-32" name = "__codelineno-13-32" href = "#__codelineno-13-32" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-13-33" name = "__codelineno-13-33" href = "#__codelineno-13-33" > < / a > < span class = "w" > < / span > < span class = "c1" > // 使用结果数组 res 覆盖原数组 nums< / span >
< a id = "__codelineno-13-34" name = "__codelineno-13-34" href = "#__codelineno-13-34" > < / a > < span class = "w" > < / span > < span class = "nb" > copy< / span > < span class = "p" > (< / span > < span class = "nx" > nums< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > res< / span > < span class = "p" > )< / span >
< a id = "__codelineno-13-35" name = "__codelineno-13-35" href = "#__codelineno-13-35" > < / a > < span class = "p" > }< / span >
< / code > < / pre > < / div >
< / div >
< div class = "tabbed-block" >