package Ġsort Ċ Ċ object ĠCount ing Sort Ġ{ ĊĠĠĠ Ġfun Ġsort ( array : ĠInt Array ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġmax ( array ) ĊĠĠĠĠĠĠĠ Ġval Ġcount Arr Ġ= ĠInt Array ( max Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġarray ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Arr [ i ] ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġrunning Sum Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcount Arr . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Sum Ġ+= Ġcount Arr [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Arr [ i ] Ġ= Ġrunning Sum ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠInt Array ( array . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġarray . size Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Value Ġ= Ġarray [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Count Ġ= Ġcount Arr [ cur Value ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ cur Count Ġ- Ġ 1 ] Ġ= Ġcur Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Arr [ cur Value ] -- ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmax ( array : ĠInt Array ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmax Ġ= ĠInt . MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġfor Ġ( intValue Ġin Ġarray ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intValue Ġ> Ġmax ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ġ= Ġint Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmax ĊĠĠĠ Ġ} Ċ }