0% found this document useful (0 votes)
295 views

Counting Sort

The counting sort is an algorithm that sorts values with a limited range by counting the number of occurrences of each unique value and using that count to place values in the correctly sorted position in the output array. It works in three passes: 1) counting the frequency of each value, 2) calculating the starting position of each value in the output array, and 3) distributing the values to their correct positions in the output array. The counting sort runs in linear time for inputs where the range of values is close to the length of the input array.

Uploaded by

Fritzie West
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
295 views

Counting Sort

The counting sort is an algorithm that sorts values with a limited range by counting the number of occurrences of each unique value and using that count to place values in the correctly sorted position in the output array. It works in three passes: 1) counting the frequency of each value, 2) calculating the starting position of each value in the output array, and 3) distributing the values to their correct positions in the output array. The counting sort runs in linear time for inputs where the range of values is close to the length of the input array.

Uploaded by

Fritzie West
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

THE COUNTING SORT

The counting sort is an efficient algorithm for sorting values that have a limited range. It was
invented by Harold H. Seward in the mid 1950s.

Suppose you have an array v containing m integers, each within the range 0 to m−1, shuffled into
random order. You can sort these integers simply by moving each integer into its correct position
within an auxiliary array.

Example
The picture below shows how the first three items in array v are moved into their correct
positions within the auxiliary array.

0 1 2 3 4 5 6 7 8 9
v 5 9 0 3 2 4 1 7 6 8

0 1 2 3 4 5 6 7 8 9
aux 0 5 9

Here’s the counting sort algorithm:

Counting Sort Algorithm

int [] aux = new int[m];


for ( int k=0; k < m; k++ )
aux[v[k]] = v[k];

The Counting Sort Page 1


A more realistic situation assumes that array v contains n integers in the range 0 to m−1, where m
is within some constant factor of n (i.e. m < cn for some constant c > 0). Also, duplicate values
are allowed. Under these conditions, the counting sort works in three passes. The first pass
counts each integer in v:

Revised Counting Sort Algorithm


Pass 1

int [] count = new int[m];


for ( int k=0; k < n; k++ )
count[v[k]]++;

Example
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
v 0 3 3 0 1 1 0 3 0 2 0 1 1 2 0

0 1 2 3
count 6 4 2 3

Each integer k occupies count[k]positions in the final sorted array. If integer k starts at
position p then, for it to occupy count[k], integer k+1 must start at position p+count[k].

Example, continued
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
v 0 3 3 0 1 1 0 3 0 2 0 1 1 2 0

0 1 2 3
count 6 4 2 3

In the sorted array, integer 0 starts at position 0 and occupies count[0] = 6 positions. Thus,
integer 1 starts at position 0+6 = 6. Likewise, integer 2 starts at position 6 + count[1] = 6 + 4
= 10.

The Counting Sort Page 2


The second pass of the algorithm calculates all of these starting positions and places them into a
third array.

Revised Counting Sort Algorithm


Pass 2

int [] start = new int[m];


start[0] = 0;
for ( int k=1; k < m; k++ )
start[k] = start[k-1] + count[k-1];

Example, continued

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
v 0 3 3 0 1 1 0 3 0 2 0 1 1 2 0

0 1 2 3
count 6 4 2 3

0 1 2 3
start 0 6 10 12

The Counting Sort Page 3


The third and final pass distributes each integer in the original array v to its final position in the
sorted array:

Revised Counting Sort Algorithm


Pass 3

int [] fin = new int[n];


for ( int k=0; k < n; k++ )
fin[ start[ v[k] ]++ ] = v[k];

Example, concluded

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
v 0 3 3 0 1 1 0 3 0 2 0 1 1 2 0

0 1 2 3
count 6 4 2 3

0 1 2 3
start 0 6 10 12

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
fin 0 0 0 0 0 0 1 1 1 1 2 2 3 3 3

The Counting Sort Page 4


Programming Exercises

1. Implement the revised counting sort algorithm as the following Java method:

int [] countingSort( int [] v, int m )


// Use Seward's counting sort algorithm that
// returns an array containing the items in 'v'
// in ascending order.
// Each v[k] is in the range 0 to m.

Write an application to test your method. The application must create an unsorted array,
call your method to sort it and print the results.

The Counting Sort Page 5

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy