import java.util.*;
import java.io.*;
public class Bucket{
private int len = 1000;
private int[] buckets = new int[len];
private double[] doubleBuckets;
private int comparisons;
private int swap;
public Bucket() {
Random r = new Random();
for (int i = 0; i < len; i ++){
buckets[i] = r.nextInt(90) + 10;
}
}
public Bucket(int length){
Random r = new Random();
len = length;
doubleBuckets = new double[length];
for (int i = 0; i < len; i ++){
doubleBuckets[i] = r.nextInt(90)*1.0 + 10.0;
}
}
public void sort(){
ArrayList[] water = new ArrayList[10];
for (int n = 0; n < 6; n++){
for (int i = 0; i < 10; i++)
water[i] = new ArrayList();
for (int i = 0; i < buckets.length; i++){
water[(buckets[i] / (int)Math.pow(10, n))% 10].add(buckets[i]);
}
int m = 0;
for (int z = 0; z < water.length; z++){
if (water[z].size() != 0){
for (int i = 0; i < water[z].size(); i++){
buckets[m] = (Integer)water[z].get(i);
m = m + 1;
}
}
}
}
}
public void bubbleSort(){
comparisons = 0;
swap = 0;
boolean swapBoolean = false;
for (int j = len - 1; j > 1 && !swapBoolean ; j--){
swapBoolean = true;
for (int i = 0; i < j; i ++){
comparisons ++;
if (doubleBuckets[i] > doubleBuckets[i+1]){
swapBoolean = false;
double tmp = doubleBuckets[i];
doubleBuckets[i] = doubleBuckets[i+1];
doubleBuckets[i+1] = tmp;
swap ++;
}
}
}
}
public void selection(){
comparisons = 0;
swap = 0;
int index = 0;
double temp;
for (int j = 0; j < len; j++){
double min = doubleBuckets[j];
for (int i = j; i < len; i++){
comparisons++;
if (doubleBuckets[i] < min){
min = doubleBuckets[i];
index = i;
}
}
//System.out.println(Arrays.toString(doubleBuckets));
swap++;
temp = doubleBuckets[j];
doubleBuckets[j] = min;
doubleBuckets[index] = temp;
}
}
public void insertion(){
comparisons = 0;
swap = 0;
//double temp;
//double temp2;
for(int j = 1; j < len; j++){
boolean swapBoolean = true;
for (int i = 0; i < j; i++){
comparisons++;
if (doubleBuckets[j] < doubleBuckets[i]){
swapBoolean = false;
double temp;
swap++;
temp = doubleBuckets[i];
doubleBuckets[i] = doubleBuckets[j];
//System.out.println(Arrays.toString(doubleBuckets));
for(int m = i + 1; m <= j; m++){
double temp2;
temp2 = doubleBuckets[m];
doubleBuckets[m] = temp;
temp = temp2;
}
}
}
}
}
public int getSwap(){
return swap;
}
public int getComparisons(){
return comparisons;
}
public String toString(){
return Arrays.toString(buckets);
}
public int[] getBuckets(){
return buckets;
}
public double[] getDoubleBuckets(){
return doubleBuckets;
}
}