import java.io.*;
import java.util.*;
public class Sorts {
private int digits = 4;
private int numNum = 10;
private int[] values = new int[10];
private ArrayList[] buckets = new ArrayList[10];
public Sorts(){
for (int i=0; i<numNum; i++){
buckets[i] = new ArrayList();
}
for (int i=0; i<numNum; i++){
Random temp = new Random();
values[i]= (int)temp.nextInt(9000)+1000;
}
}
public Sorts(int dig,int nums){
buckets = new ArrayList[nums];
values = new int[nums];
digits = dig;
numNum = nums;
for (int i=0; i<nums; i++){
buckets[i] = new ArrayList();
}
for (int x=0; x<nums; x++){
Random temp = new Random();
values[x]= (int)temp.nextInt(9000)+1000;
}
}
public void radixSort(){
for (int i=0; i<digits; i++){
for (int j=0; j<numNum; j++){
double temp = values[j]/Math.pow(10,i);
buckets[(int)temp%10].add(values[j]);
}
int n=0;
for (int m=0; m<numNum; m++){
for (int k=0; k<buckets[m].size(); k++){
values[n]=(Integer)buckets[m].get(k);
n=n++;
}
}
for (int b=0; b<buckets.length; b++){
buckets[b].clear();
}
}
}
public String toString(){
return Arrays.toString(values);
}
// BUBBLE SORT STUFF STARTS HERE
// uses same array (values) as radix
public void bSort() {
int count = 0;
int swaps = 0;
for (int i=0; i<values.length-1; i++) {
for (int j=0; j<values.length-1; j++) {
count++;
if (values[j] > values[j+1]) {
int temp = values[j];
values[j] = values[j+1];
values[j+1] = temp;
swaps++;
}
}
}
}
public void iSort(int[] a) {
int comps = 0;
int swaps = 0;
int[] tmp = a;
for (int i = 1; i < a.length; i++){
for (int i2 = i; i2>tmp[i]&&tmp[i]<tmp[i-1]; i2--){
comps++;
swaps++;
int t = tmp[i2];
tmp[i2]=tmp[i2-1];
tmp[i2-1]=t;
}
}
}
}