import java.io.*;
import java.util.*;
public class Buckets {
int g = 100000;
ArrayList[] buckets = new ArrayList[g];
int[] nums = new int[g];
public int swaps,comparisons,assignments;
public Buckets() {
for(int i = 0; i<g; i++) {
buckets[i] = new ArrayList();
}
Random r = new Random();
for (int i=0; i<g; i++) {
nums[i] = r.nextInt(100);
}
}
public void sort() {
for (int n=0; n<4; n++){
for (int i=0; i<nums.length; i++){
int digit = (nums[i]/(int)Math.pow(10,n)%10);
buckets[digit].add(nums[i]);
}
int z=0;
while (z<nums.length) {
for (int i=0; i<buckets.length; i++) {
for (int j=0; j<buckets[i].size(); j++){
nums[z] = (Integer)buckets[i].get(j);
z=z+1;
}
}
}
for (int i=0; i<nums.length; i++) {
buckets[i] = new ArrayList();
}
}
}
public void bsort() {
int comparisons = 0;
int swaps = 0;
boolean b = true;
while (b) {
b = false;
for (int i = 0; i<nums.length-1; i++) {
comparisons++;
if (nums[i] > nums[i+1]) {
int temp = nums[i];
nums[i] = nums[i+1];
nums[i+1] = temp;
b = true;
swaps++;
}
}
}
}
public void insertSort() {
int comparisons = 0;
int assignments = 0;
for (int i=1;i<nums.length;i++) {
int temp = nums[i];
int shifts = 0;
int j;
for (j=i-1; j>=0&&temp<nums[j];j--) {
nums[j+1] = nums[j];
comparisons++;
shifts++;
}
nums[j+1] = temp;
assignments = 2 + shifts;
}
}
public void selectSort() {
int comparisons = 0;
for (int i=0;i<nums.length;i++) {
int index = i;
for (int j=i+1;j<nums.length;j++) {
if (nums[index] > nums[j]) {
comparisons++;
index = j;
}
}
if (index != i) {
int temp = nums[index];
nums[index] = nums[i];
nums[i] = temp;
}
}
}
public String toString() {
return Arrays.toString(nums);
}
public int numSwaps() {
return swaps;
}
public int numComparisons() {
return comparisons;
}
public int numAssignments() {
return assignments;
}
}