Top Banner
Sorting Algorithms
43

Counting Sort and Radix Sort Algorithms

Jul 16, 2015

Download

Education

Sarvesh Rawat
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Counting Sort and Radix Sort Algorithms

Sorting Algorithms

Page 2: Counting Sort and Radix Sort Algorithms

Counting sort Counting sort assumes that each of the n input elements is an

integer in the range 0 to k. that is n is the number of elements and k is the highest value element.

Consider the input set : 4, 1, 3, 4, 3. Then n=5 and k=4 Counting sort determines for each input element x, the number of

elements less than x. And it uses this information to place element x directly into its position in the output array. For example if there exits 17 elements less that x then x is placed into the 18th position into the output array.

The algorithm uses three array:

Input Array: A[1..n] store input data where A[j] ∈ {1, 2, 3, …, k}

Output Array: B[1..n] finally store the sorted data

Temporary Array: C[1..k] store data temporarily

Page 3: Counting Sort and Radix Sort Algorithms

Counting Sort1. Counting-Sort(A, B, k)2. Let C[0…..k] be a new array3. for i=0 to k4. C[i]= 0;5. for j=1 to A.length or n6. C[ A[j] ] = C[ A[j] ] + 1;7. for i=1 to k8. C[i] = C[i] + C[i-1];9. for j=n or A.length down to 110. B[ C[ A[j] ] ] = A[j];11. C[ A[j] ] = C[ A[j] ] - 1;

Page 4: Counting Sort and Radix Sort Algorithms

Counting Sort1. Counting-Sort(A, B, k)2. Let C[0…..k] be a new array3. for i=0 to k [Loop 1]4. C[i]= 0;5. for j=1 to A.length( or n) [Loop 2]6. C[ A[j] ] = C[ A[j] ] + 1;7. for i=1 to k [Loop 3]8. C[i] = C[i] + C[i-1];9. for j=n or A.length down to 1 [Loop 4]10. B[ C[ A[j] ] ] = A[j];11. C[ A[j] ] = C[ A[j] ] - 1;

Page 5: Counting Sort and Radix Sort Algorithms

Counting-sort example

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 0 2 2 3 3 0 0 3 3

0

5

1 2 3 4 5 6 7 8

Page 6: Counting Sort and Radix Sort Algorithms

Executing Loop 1

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 0 2 2 3 3 0 0 3 3

0 0 0 0 0 0 0 0 0 0

0

0 0

5

1 2 3 4 5 6 7 8

Page 7: Counting Sort and Radix Sort Algorithms

Executing Loop 2

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 0 2 2 3 3 0 0 3 3

0 0 0 0 1 0 0 0 0

0

0 0

5

1 2 3 4 5 6 7 8

Page 8: Counting Sort and Radix Sort Algorithms

Executing Loop 2

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 3 3 0 0 2 2 3 3 0 0 3 3

0 0 0 0 1 1 0 0 0 0

0

1

5

1 2 3 4 5 6 7 8

Page 9: Counting Sort and Radix Sort Algorithms

Executing Loop 2

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 0 0 2 2 3 3 0 0 3 3

0 0 0 0 1 1 1 0 0

0

1 1

5

1 2 3 4 5 6 7 8

Page 10: Counting Sort and Radix Sort Algorithms

Executing Loop 2

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 2 2 3 3 0 0 3 3

1 0 0 1 1 1 1 0 0

0

1 1

5

1 2 3 4 5 6 7 8

Page 11: Counting Sort and Radix Sort Algorithms

Executing Loop 2

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 0 2 3 3 0 0 3 3

1 1 0 0 2 1 1 0 0

0

1 1

5

1 2 3 4 5 6 7 8

Page 12: Counting Sort and Radix Sort Algorithms

Executing Loop 2

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 0 2 2 3 0 0 3 3

1 1 0 0 2 2 2 0 0

0

1 1

5

1 2 3 4 5 6 7 8

Page 13: Counting Sort and Radix Sort Algorithms

Executing Loop 2

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 0 2 2 3 3 0 3 3

2 0 0 2 2 2 2 0 0

0

1 1

5

1 2 3 4 5 6 7 8

Page 14: Counting Sort and Radix Sort Algorithms

Executing Loop 2

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 0 2 2 3 3 0 0 3

2 2 0 0 2 2 3 0 0

0

1 1

5

1 2 3 4 5 6 7 8

Page 15: Counting Sort and Radix Sort Algorithms

End of Loop 2

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 0 2 2 3 3 0 0

2 2 0 0 2 2 0 0

0

1 1

5

1 2 3 4 5 6 7 8

3 3

3 3

Page 16: Counting Sort and Radix Sort Algorithms

Executing Loop 3

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 0 2 2 3 3 0 0

2 0 2 2 0 0 0

1 1 5

1 2 3 4 5 6 7 8

3 3

3 3

C: 2 2 0 0 1 1 3 3

1 2 3 40 5

2 2 2

Page 17: Counting Sort and Radix Sort Algorithms

Executing Loop 3

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 0 2 2 3 3 0 0

2 2 2 2 0 0 0

1 1 5

1 2 3 4 5 6 7 8

3 3

3 3

C: 2 2 4 0 0 1 1 3 3

1 2 3 40 5

2 2

Page 18: Counting Sort and Radix Sort Algorithms

Executing Loop 3

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 0 2 2 3 3 0 0

4 2 2 0 0 0

1 1 5

1 2 3 4 5 6 7 8

3

3 3

C: 2 2 4 4 0 0 1 1 7

1 2 3 40 5

2 2

2 2

Page 19: Counting Sort and Radix Sort Algorithms

Executing Loop 3

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 0 2 2 3 3 0 0

2 2 0 0

1 1 5

1 2 3 4 5 6 7 8

7

3 3

C: 2 2 4 4 7 1 1

1 2 3 40 5

2 2

2 2

4 4

7 7

Page 20: Counting Sort and Radix Sort Algorithms

Executing Loop 3

A:

B:

1 2 3 4 5

C:

1 2 3 4

6 7 8

5 5 3 3 0 0 2 2 3 3 0 0

2 2

0

1

5

1 2 3 4 5 6 7 8

3 3

C: 2 2 4 4 8

1 2 3 40 5

2 2

2 2

4 4

7 7

7 7 7

7 7

Page 21: Counting Sort and Radix Sort Algorithms

End of Loop 3

A:

B:

1 2 3 4 5

6 7 8

5 5 3 3 0 0 2 2 3 3 0 0

1 2 3 4 5 6 7 8

3 3

C: 2 2 4 4

1 2 3 40 5

2 2 7 7 7 7 8 8

Page 22: Counting Sort and Radix Sort Algorithms

Executing Loop 4

A:

B:

1 2 3 4 5

6 7 8

5 5 3 3 0 0 2 2 3 3 0 0

1 2 3 4 5 6 7 8

3

C: 2 2 4 4

1 2 3 40 5

2 2 7 7 7 8 8

Page 23: Counting Sort and Radix Sort Algorithms

Executing Loop 4

A:

B:

1 2 3 4 5

6 7 8

5 5 3 3 0 0 2 2 3 3 0 0

1 2 3 4 5 6 7 8

C: 2 2 4 4

1 2 3 40 5

2 2 7 7 7 8 8

3

J=8, then A[ j ]=A[8]=3And B[ C[ A[j] ] ]=B[ C[ 3 ] ]=B[ 7]So B[ C[ A[j] ] ] ←A[ j ]=B[7]←3

Page 24: Counting Sort and Radix Sort Algorithms

A:

B:

1 2 3 4 5

6 7 8

5 5 3 3 0 0 2 2 3 3

1 2 3 4 5 6 7 8

C: 2 4 4

1 2 3 40 5

2 2 7 7 8 8

3 3 0

6 6

3 3

Executing Loop 4

J=8, then A[ j ]=A[8]=3Then C[ A[j] ] = C[ 3 ] =7So C[ A[j] ] = C[ A[j] ] -1=7-1=6

Page 25: Counting Sort and Radix Sort Algorithms

Executing Loop 4

A:

B:

1 2 3 4 5

6 7 8

5 5 3 3 0 0 2 2

1 2 3 4 5 6 7 8

C: 4 4

1 2 3 40 5

2 2 7 7 8 8

3 3

6

3 3

0 0

1 1

0 0

3

Page 26: Counting Sort and Radix Sort Algorithms

Executing Loop 4

A:

B:

1 2 3 4 5

6 7 8

5 5 3 3 0 0

1 2 3 4 5 6 7 8

C: 4

1 2 3 40 5

2 2 7 7 8 8

3 3

5 5

3 3

0 0

0 0

2

1 1

3 3

3 3

Page 27: Counting Sort and Radix Sort Algorithms

Executing Loop 4

A:

B:

1 2 3 4 5

6 7 8

5 5 3 3

1 2 3 4 5 6 7 8

C: 3 3

1 2 3 40 5

2 2 7 7 8 8

3 3

3 3

0 0

0 0

0

1

3 3

3 3

5 5

2 2

Page 28: Counting Sort and Radix Sort Algorithms

Executing Loop 4

A:

B:

1 2 3 4 5

6 7 8

5 5

1 2 3 4 5 6 7 8

C:

1 2 3 40 5

2 2 7 7 8 8

3 3

3 3

0 0

0 0

0

0 0

3 3

3 3

5 3 3

0 0 2 2

3

Page 29: Counting Sort and Radix Sort Algorithms

Executing Loop 4

A:

B:

1 2 3 4 5 6 7 8

1 2 3 4 5 6

7 8

C:

1 2 3 40 5

2 2 7 7 8

3 3

3 3

0 0

0 0

0 3 3

3 3

3 3

0 0 2 2

3 3 5

4 4

3 3

0 0

Page 30: Counting Sort and Radix Sort Algorithms

Executing Loop 4

A:

B:

1 2 3 4 5 6 7 8

1 2 3 4 5 6

7 8

C:

1 2 3 40 5

2 2 7 7 7 7

3 3

3 3

0 0

0 0

0 3 3

3 3

3

0 0 2 2

3 3 2

3 3

0 0

5 5

4 4

5 5

Page 31: Counting Sort and Radix Sort Algorithms

End of Loop 4

A:

B:

1 2 3 4 5 6 7 8

1 2 3 4 5 6 7 8

C:

1 2 3 40 5

2 2 7 7

3 3

3 3

0 0

0 0

0 3 3

3 3 0 0 2 2

3 3

3 3

0 0

5 5

4 4

5 5

2 2 7 7

2 2

Sorted data in Array B

Page 32: Counting Sort and Radix Sort Algorithms

Time Complexity Analysis1. Counting-Sort(A, B, k)2. Let C[0…..k] be a new array3. for i=0 to k [Loop 1]4. C[i]= 0;5. for j=1 to A.length or n [Loop 2]6. C[ A[j] ] = C[ A[j] ] + 1;7. for i=1 to k [Loop 3]8. C[i] = C[i] + C[i-1];9. for j=n or A.length down to 1 [Loop 4]10. B[ C[ A[j] ] ] = A[j];11. C[ A[j] ] = C[ A[j] ] - 1;

Loop 2 and 4 takes O(n) time

Loop 1 and 3 takes O(k) time

Page 33: Counting Sort and Radix Sort Algorithms

Time Complexity Analysis

• So the counting sort takes a total time of: O(n + k)• Counting sort is called stable sort.– A sorting algorithm is stable when numbers with

the same values appear in the output array in the same order as they do in the input array.

Page 34: Counting Sort and Radix Sort Algorithms

Counting Sort Review• Assumption: input taken from small set of numbers of size k• Basic idea: – Count number of elements less than you for each element.– This gives the position of that number – similar to selection

sort.• Pro’s:– Fast– Asymptotically fast - O(n+k)– Simple to code

• Con’s:– Doesn’t sort in place.– Requires O(n+k) extra storage.

Page 35: Counting Sort and Radix Sort Algorithms

Radix Sort

• Radix sort is non comparative sorting method

• Two classifications of radix sorts are least significant digit (LSD) radix sorts and most significant digit (MSD) radix sorts.

• LSD radix sorts process the integer representations starting from the least digit and move towards the most significant digit. MSD radix sorts work the other way around.

35

Page 36: Counting Sort and Radix Sort Algorithms

Radix Sort

;digit on array sort sort to stable a use" do

to1for

),(Sort-Radix

digit. ofnumber a iselement each ,array input In

iA

di

dA

dA

355

720

436

839

657

457

329

839

329

657

457

436

355

720

657

457

355

839

436

329

720

839

720

657

457

436

355

329

Page 37: Counting Sort and Radix Sort Algorithms

The Algorithmvoid radixsort(int a[1000],int n,int digits)

{

for(int i =1;i<=digits;i++)

countsort(a,n,i);

}

Page 38: Counting Sort and Radix Sort Algorithms

The Algorithm

void countsort(int a[1000],int n,int x)

{

int d[1000],t;

for(int s=1;s<=n;s++) // extracting the concerned digit from { t = a[s]; the number

t = t / (pow(10,x-1));

d[s] = t%10;

}

int c[10],b[1000],i,j;

for(i=0;i<=9;i++)

c[i] = 0;

Page 39: Counting Sort and Radix Sort Algorithms

The Algorithmfor(j = 1;j<=n;++j)

c[d[j]] = c[d[j]] + 1; //c[i] contains no of elements for(i =0;i<9;i++) equal to i

c[i+1] = c[i+1] + c[i];

for(j=n;j>0;j--)

{ b[c[d[j]]] = a[j]; //shift the array’s numbers

c[d[j]] = c[d[j]] -1;

}

for(i=1;i<=n;i++)

a[i] = b[i];

}

Page 40: Counting Sort and Radix Sort Algorithms

Time Complexity Analysis

Given n d-digit number in which each digit can take up to k possible values, RADIX-SORT correctly sorts these numbers in Ө(d(n+k)) time if the stable sort it uses takes Ө(n+k) time.

Page 41: Counting Sort and Radix Sort Algorithms

Time Complexity Analysis

Given n b-bit numbers and any positive integer r<=b, RADIX-SORT correctly sorts theses numbers in Ө((b/r)(n + 2r)) time if the stable sort it uses takes Ө(n+k) time for inputs in the range 0 to k.

For example – A 32 bit word can be viewed as four 8 bit digits, so b = 32, r = 8, k = 2r – 1 = 255, d = 4. Each pass of counting sort takes time Ө(n+k) = Ө(n+2r) and there are d passes, so total running time Ө(d(n+2r)) = Ө(b/r(n+2r))

Page 42: Counting Sort and Radix Sort Algorithms

Radix Sort Review• Assumption: input taken from large set of numbers • Basic idea: – Sort the input on the basis of digits starting from unit’s

place.– This gives the position of that number – similar to selection

sort.• Pro’s:– Fast– Asymptotically fast - O(d(n+k))– Simple to code

• Con’s:– Doesn’t sort in place.

Page 43: Counting Sort and Radix Sort Algorithms