// Path: Java-data-Structures/src/main/java/com/sorting/CountingSort.java
// public class CountingSort {
// 
//     public static int[] sort(int[] A) {
//         if (A == null)
//             return A;
// 
//         // find min and max
//         int min = A[0];
//         int max = A[0];
//         for (int i = 1; i < A.length; i++) {
//             min = Math.min(min, A[i]);
//             max = Math.max(max, A[i]);
//         }
// 
//         // fill the counting array
//         int countArraySize = max - min + 1;
//         int[] count = new int[countArraySize];
//         for (int i = 0; i < A.length; i++) {
//             count[A[i] - min] = count[A[i] - min] + 1;
//         }
// 
//         // compute the partial sum of the counting array
//         for (int i = 1; i < countArraySize; i++) {
//             count[i] = count[i] + count[i - 1];
//         }
// 
//         int[] B = new int[A.length];
//         for (int i= A.length-1; i>=0; i--) {
//             count[A[i] - min] = count[A[i] - min] - 1;
//             B[count[A[i] - min]] = A[i];
//         }
//         
//         return B;
//     }
// 
// }


import com.sorting.CountingSort;
import junit.framework.TestCase;
package com.test.sorting;



public class TestCountingSort extends TestCase{

    public void testCountingSort() {
        
        int[] A = { 2, 4, 7, 542, 0, 1, 3, 0, 6, 2, 7, 9, 10, 2, 4, -29, 6, 0, 3, 2, 9, 2, 77, 33, 22, 5, 4, 2, 2, 2 };
        
// Path: Java-data-Structures/src/main/java/com/sorting/CountingSort.java
// public class CountingSort {
// 
//     public static int[] sort(int[] A) {
//         if (A == null)
//             return A;
// 
//         // find min and max
//         int min = A[0];
//         int max = A[0];
//         for (int i = 1; i < A.length; i++) {
//             min = Math.min(min, A[i]);
//             max = Math.max(max, A[i]);
//         }
// 
//         // fill the counting array
//         int countArraySize = max - min + 1;
//         int[] count = new int[countArraySize];
//         for (int i = 0; i < A.length; i++) {
//             count[A[i] - min] = count[A[i] - min] + 1;
//         }
// 
//         // compute the partial sum of the counting array
//         for (int i = 1; i < countArraySize; i++) {
//             count[i] = count[i] + count[i - 1];
//         }
// 
//         int[] B = new int[A.length];
//         for (int i= A.length-1; i>=0; i--) {
//             count[A[i] - min] = count[A[i] - min] - 1;
//             B[count[A[i] - min]] = A[i];
//         }
//         
//         return B;
//     }
// 
// }


// Path: Java-data-Structures/src/test/java/com/test/sorting/TestCountingSort.java
import com.sorting.CountingSort;
import junit.framework.TestCase;

package com.test.sorting;



public class TestCountingSort extends TestCase{

    public void testCountingSort() {
        
        int[] A = { 2, 4, 7, 542, 0, 1, 3, 0, 6, 2, 7, 9, 10, 2, 4, -29, 6, 0, 3, 2, 9, 2, 77, 33, 22, 5, 4, 2, 2, 2 };
        
        A = CountingSort.sort(A);