import java.util.*;
/**
* A sample of base 10 radix sort algorithm.
*/
public class RadixSort {
// base 10
// LinkedList is also a Queue
@SuppressWarnings("unchecked")
private static LinkedList<Integer>[] counter = new LinkedList[] {
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>()
};
public static void sortLSD(int[] array, int maxDigitSymbols) {
int mod = 10;
int dev = 1;
for (int i = 0; i < maxDigitSymbols; i++, dev *= 10, mod *= 10) {
for(int j = 0; j < array.length; j++) {
int bucket = (array[j] % mod) / dev;
counter[bucket].add(array[j]);
}
int pos = 0;
for(int j = 0; j < counter.length; j++) {
Integer value = null;
while ((value = counter[j].poll()) != null) {
array[pos++] = value;
}
}
}
}
public static void main(String... args) {
int[] test = { 10, 1, 30, 156 };
// we choose 3, because we have 156 with 3 digits
RadixSort.sortLSD(test, 3);
System.out.println(Arrays.toString(test));
}
}
private static LinkedList<Integer>[] counter = new LinkedList[] {
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>(),
new LinkedList<Integer>()
};
int mod = 10;
int dev = 1;
for (int i = 0; i < maxDigitSymbols; i++, dev *= 10, mod *= 10) {
for(int j = 0; j < array.length; j++) {
int bucket = (array[j] % mod) / dev;
counter[bucket].add(array[j]);
}
int pos = 0;
for(int j = 0; j < counter.length; j++) {
Integer value = null;
while ((value = counter[j].poll()) != null) {
array[pos++] = value;
}
}
}
int[] test = { 10, 1, 30, 156 };
// we choose 3, because we have 156 with 3 digits
RadixSort.sortLSD(test, 3);
System.out.println(Arrays.toString(t est));
import java.util.*;
/**
* A sample of base 10 radix sort algorithm.
*/
public class RadixSortMSD {
public static void msd(String[] a)
{
msd(a, 0, a.length, 0);
}
private static void msd(String[] a, int lo, int hi, int d)
{
if (hi <= lo + 1) return;
int[] count = new int[256+1];
for (int i = 0; i < N; i++)
count[a[i].charAt(d) + 1]++;
for (int k = 1; k < 256; k++)
count[k] += count[k-1];
for (int i = 0; i < N; i++)
temp[count[a[i].charAt(d)]++] = a[i];
for (int i = 0; i < N; i++)
a[i] = temp[i];
for (int i = 0; i < 255; i++)
msd(a, l + count[i], l + count[i+1], d+1);
}
}
private static void msd(String[] a, int lo, int hi, int d)
{
int N = a.length();
if (hi <= lo + 1) return;
int[] count = new int[256+1];
for (int i = 0; i < N; i++)
count[a[i].charAt(d) + 1]++;
for (int k = 1; k < 256; k++)
count[k] += count[k-1];
for (int i = 0; i < N; i++)
temp[count[a[i].charAt(d)]++] = a[i];
for (int i = 0; i < N; i++)
a[i] = temp[i];
for (int i = 0; i < 255; i++)
msd(a, lo + count[i], lo + count[i+1], d+1);
}
public class sssss {
/**
* @param args
*/
/*public static void main(String[] args) {
// TODO Auto-generated method stub
}
*/
private static void msd(String[] a, int lo, int hi, int d)
{
int N = a.length();
if (hi <= lo + 1) return;
int[] count = new int[256+1];
for (int i = 0; i < N; i++)
count[a[i].charAt(d) + 1]++;
for (int k = 1; k < 256; k++)
count[k] += count[k-1];
for (int i = 0; i < N; i++)
temp[count[a[i].charAt(d)]++] = a[i];
for (int i = 0; i < N; i++)
a[i] = temp[i];
for (int i = 0; i < 255; i++)
msd(a, lo + count[i], lo + count[i+1], d+1);
}
}
public class sssss {
/**
* @param args
*/
/*public static void main(String[] args) {
// TODO Auto-generated method stub
}
*/
private static void msd(String[] a, int lo, int hi, int d)
{
int N = a.length;
if (hi <= lo + 1) return;
int[] count = new int[256+1];
for (int i = 0; i < N; i++)
count[a[i].charAt(d) + 1]++;
for (int k = 1; k < 256; k++)
count[k] += count[k-1];
String[] temp;
for (int i = 0; i < N; i++)
temp[count[a[i].charAt(d)]++] = a[i];
for (int i = 0; i < N; i++)
a[i] = temp[i];
for (int i = 0; i < 255; i++)
msd(a, lo + count[i], lo + count[i+1], d+1);
}
}
public class ssssss {
/**
* @param args
*/
/*public static void main(String[] args) {
// TODO Auto-generated method stub
}
*/
private static void msd(String[] a, int lo, int hi, int d)
{
int N = a.length;
if (hi <= lo + 1) return;
int[] count = new int[256+1];
for (int i = 0; i < N; i++)
count[a[i].charAt(d) + 1]++;
for (int k = 1; k < 256; k++)
count[k] += count[k-1];
String[] temp = null;
for (int i = 0; i < N; i++)
temp[count[a[i].charAt(d)]++] = a[i];
for (int i = 0; i < N; i++)
a[i] = temp[i];
System.out.println("test....");
for (int i = 0; i < 255; i++)
msd(a, lo + count[i], lo + count[i+1], d+1);
}
}
public class ssssss {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String mystr[] = {"100", "50", "10","1000","400","300","200"};
System.out.println(Arrays.toString(mystr));
msd(mystr);
System.out.println(Arrays.toString(mystr));
}
public static void msd(String[] a){
msd(a,0,a.length, 0 );
}
private static void msd(String[] a, int lo, int hi, int d)
{
int N = a.length;
if (hi <= lo + 1) return;
int[] count = new int[256+1];
for (int i = 0; i < N; i++)
count[a[i].charAt(d) + 1]++;
for (int k = 1; k < 256; k++)
count[k] += count[k-1];
String[] temp = null;
for (int i = 0; i < N; i++)
temp[count[a[i].charAt(d)]++] = a[i];
for (int i = 0; i < N; i++)
a[i] = temp[i];
System.out.println("test....");
for (int i = 0; i < 255; i++)
msd(a, lo + count[i], lo + count[i+1], d+1);
}
}
temp[count[a[i].charAt(d)]++] = a[i];
package jdbc;
import java.util.Arrays;
public class ssssss {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String mystr[] = { "100", "50", "10", "1000", "400", "300", "200" };
System.out.println(Arrays.toString(mystr));
msd(mystr);
System.out.println(Arrays.toString(mystr));
}
public static void msd(String[] a) {
msd(a, 0, a.length, 0);
}
private static void msd(String[] a, int lo, int hi, int d) {
int N = a.length;
if (hi <= lo + 1)
return;
int[] count = new int[256 + 1];
for (int i = 0; i < N; i++)
count[a[i].charAt(d) + 1]++;
for (int k = 1; k < 256; k++)
count[k] += count[k - 1];
String[] temp = null;
for (int i = 0; i < N; i++)
temp[count[a[i].charAt(d)]++] = a[i];
for (int i = 0; i < N; i++)
a[i] = temp[i];
System.out.println("test....");
for (int i = 0; i < 255; i++)
msd(a, lo + count[i], lo + count[i + 1], d + 1);
}
}
[100, 50, 10, 1000, 400, 300, 200]import java.util.Arrays;
public class ssssss {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String mystr[] = { "100", "50", "10", "1000", "400", "300", "200" };
System.out.println(Arrays.toString(mystr));
msd(mystr);
System.out.println(Arrays.toString(mystr));
}
public static void msd(String[] a) {
msd(a, 0, a.length, 0);
}
private static void msd(String[] a, int lo, int hi, int d) {
int N = a.length;
if (hi <= lo + 1)
return;
int[] count = new int[256 + 1];
for (int i = 0; i < N; i++)
count[a[i].charAt(d) + 1]++;
for (int k = 1; k < 256; k++)
count[k] += count[k - 1];
//String[] temp = null;
String[] temp = new String[a.length];
for (int i = 0; i < N; i++)
temp[count[a[i].charAt(d)]++] = a[i];
for (int i = 0; i < N; i++)
a[i] = temp[i];
System.out.println("test....");
for (int i = 0; i < 255; i++)
msd(a, lo + count[i], lo + count[i + 1], d + 1);
}
}
when i=1 and d=2,
a[ i]=10
and there is no a[ i].charAt(2)
and there is no a[ i].charAt(2)
import java.util.Arrays;
public class ssssss {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String mystr[] = { "100", "50", "10", "1000", "400", "300", "200" };
System.out.println(Arrays.toString(mystr));
msd(mystr);
System.out.println(Arrays.toString(mystr));
}
public static void msd(String[] a) {
msd(a, 0, a.length, 0);
}
private static void msd(String[] a, int lo, int hi, int d) {
int N = a.length;
if (hi <= lo + 1)
return;
int[] count = new int[256 + 1];
for (int i = 0; i < N; i++)
count[a[i].charAt(d) + 1]++;
for (int k = 1; k < 256; k++)
count[k] += count[k - 1];
//String[] temp = null;
String[] temp = new String[a.length];
for (int i = 0; i < N; i++)
temp[count[a[i].charAt(d)]++] = a[i];
for (int i = 0; i < N; i++)
a[i] = temp[i];
System.out.println("test....");
for (int i = 0; i < 255; i++)
msd(a, lo + count[i], lo + count[i + 1], d + 1);
}
}