24 lines
1.3 KiB
Plaintext
24 lines
1.3 KiB
Plaintext
{{Sorting Algorithm}}
|
|
{{Wikipedia|Counting sort}}
|
|
Implement the [[wp:Counting sort|Counting sort]]. This is a way of sorting integers when the minimum and maximum value are known.
|
|
|
|
Pseudocode:
|
|
'''function''' ''countingSort''(array, min, max):
|
|
count: '''array of''' (max - min + 1) '''elements'''
|
|
'''initialize''' count '''with''' 0
|
|
'''for each''' number '''in''' array '''do'''
|
|
count[number - min] := count[number - min] + 1
|
|
'''done'''
|
|
z := 0
|
|
'''for''' i '''from''' min '''to''' max '''do'''
|
|
'''while''' ( count[i - min] > 0 ) '''do'''
|
|
array[z] := i
|
|
z := z+1
|
|
count[i - min] := count[i - min] - 1
|
|
'''done'''
|
|
'''done'''
|
|
|
|
The ''min'' and ''max'' can be computed apart, or be known ''a priori''.
|
|
|
|
'''Note''': we know that, given an array of integers, its maximum and minimum values can be always found; but if we imagine the worst case for an array of 32 bit integers, we see that in order to hold the counts, we need an array of 2<sup>32</sup> elements, i.e., we need, to hold a count value up to 2<sup>32</sup>-1, more or less 4 Gbytes. So the counting sort is more practical when the range is (very) limited and minimum and maximum values are known ''a priori''. (Anyway sparse arrays may limit the impact of the memory usage)
|