第八章線形時間ソート8.2カウントソート
3242 ワード
package chap08_Linear_Time_Sort;
import static org.junit.Assert.*;
import java.util.Arrays;
import org.junit.Test;
public class SortAlgorithms {
/**
* maxvalue
*
* @param a
* @param maxValue
*/
static void countingSort(int[] a, int maxValue) {
// a
int[] b = Arrays.copyOf(a, a.length);
// 0 maxvalue , a
int[] c = new int[maxValue + 1];
//
for (int i = 0; i < b.length; i++) {
c[b[i]]++;
}
// c[i] i
for (int i = 1; i <= maxValue; i++) {
c[i] += c[i - 1];
}
// a 。 ,
for (int i = b.length - 1; i >= 0; i--) {
a[c[b[i]] - 1] = b[i];
c[b[i]]--;
}
}
@Test
public void testName() throws Exception {
int[] a = { 13, 19, 9, 5, 12, 8, 7, 4, 21, 2, 6, 11 };
System.out.println(Arrays.toString(a));
countingSort(a, 21);
System.out.println(Arrays.toString(a));
}
}