// Arup Guha
// 9/30/02
import java.util.Random;

public class BucketSort {

  private LL[] buckets;
  private int range;

  public BucketSort(int n, int r) {
    buckets = new LL[n];
    for (int i=0; i<n; i++)
      buckets[i] = new LL();
    range = r;
  }

  public void Sort(int [] values) {

    for (int i=0; i<values.length; i++) {
      buckets[values.length*values[i]/range].insert(values[i]);
    }
  }

  public int[] createValues(int n) {
    Random r = new Random();
    int[] values = new int[n];
    for (int i=0; i<n; i++)
      values[i] = Math.abs(r.nextInt()%range);
    return values;
  }

  public void print() {
    for (int i=0; i<buckets.length; i++) {
      System.out.print("Index "+i+" List: ");
      buckets[i].printlist();
      System.out.println();
    }
  }

  public int length() {
    return buckets.length;
  }

  public static void main(String [] args) {

    final int numvals = 1000;

    BucketSort test = new BucketSort(numvals,30000);
    int[] nums = test.createValues(numvals);
    test.Sort(nums);
    test.print();
  }
}
