import java.io.*;
import java.util.*;
public class BucketsSort {
private ArrayList<Integer>[] buckets = new ArrayList[100];
private int[] nums = new int[10];
public String toString() {
return "Nums: " + Arrays.toString(nums);
}
public String printBuckets() {
return "Buckets: " + Arrays.toString(buckets);
}
public BucketsSort() {
for (int i = 0; i < 10; i++) {
buckets[i] = new ArrayList<Integer>();
}
Random r = new Random();
for (int i = 0; i < nums.length; i++) {
nums[i] = r.nextInt(8999)+1000;
}
}
public void sortIntoBuckets(int n) {
int value;
for (int i = 0;i<nums.length;i++) {
value = (int)((nums[i]/(Math.pow(10,n))) % 10);
buckets[value].add(nums[i]);
}
}
public void copyIntoArray() {
int[] temp = new int[nums.length];
int i=0;
while (i < temp.length) {
for (int j = 0; j < buckets.length; j++) {
if( buckets[j].size() != 0) {
for (int k=0; k < buckets[j].size();k++) {
temp[i] = buckets[j].get(k);
i++;
}
}
}
}
nums = temp;
}
public void sort() {
for (int n = 0; n < 4; n++) {
//System.out.println("Digit: " + n);
sortIntoBuckets(n);
copyIntoArray();
//System.out.println(printBuckets());
//System.out.println(this);
ArrayList<Integer>[] temp = new ArrayList[100];
for (int i = 0; i < 10; i++) {
temp[i] = new ArrayList<Integer>();
}
buckets = temp;
}
}
}