import java.io.*;
import java.util.*;
public class Sorter{
private ArrayList[] buckets = new ArrayList[10];
private int[] nums;
private int digits, size;
private int compFreqs,swapFreqs;
Random r = new Random();
//Default Constructor (ten 4-digit integers)
public Sorter(){
nums = new int[10];
for (int i = 0; i<10; i++)
nums[i] = r.nextInt(10000);
digits = 4;
size = 10;
}
//Custom Constructor (s d-digit integers)
public Sorter(int d, int s){
digits = d;
size = s;
nums = new int[size];
int range = 1;
for (int j = 0; j<digits; j++)
range = range * 10;
for (int i = 0; i<size; i++)
nums[i] = r.nextInt(range);
}
public String toString() {
return Arrays.toString(nums);
}
//Radix Sort Method
public void radix(){
for (int a=0; a<10; a++)
buckets[a] = new ArrayList();
for (int b = 0; b<digits;b++){
for (int c = 0; c<nums.length; c++){
int z = nums[c];
for (int d=b; d>0; d--)
z = z/10;
z = z%10;
int y= nums[c];
buckets[z].add(y);
}
for(int e=0; e<nums.length; e++){
for (int f=0; f<buckets.length;f++) {
if (buckets[f].size() != 0) {
nums[e] = (Integer) buckets[f].get(0);
buckets[f].remove(0);
f = buckets.length;
}
}
}
}
}
//Bubble Sort Method
public int[] bubble(int[] a) {
swapFreqs = 0;
compFreqs = 0;
int[] tempArray = new int[a.length];
tempArray = a;
for (int i = 0; i<a.length; i++){
for (int j = 0; j < a.length-1; j++){
compFreqs++;
if (tempArray[j] > tempArray[j+1]){
swapFreqs++;
int temp = tempArray[j];
tempArray[j] = tempArray[j+1];
tempArray[j+1] = temp;
}
}
}
return tempArray;
}
//Selection Sort Method
public int[] selection(int[] a){
swapFreqs = 0;
compFreqs = 0;
int[] tempArray = new int[a.length];
tempArray = a;
for (int i = 0; i<a.length; i++) {
int smallest = tempArray[i];
int tracker = i;
for (int j = i+1; j<a.length; j++) {
if (tempArray[j] <= smallest) {
smallest = tempArray[j];
tracker = j;
}
compFreqs++;
}
tempArray[tracker] = tempArray[i];
tempArray[i] = smallest;
swapFreqs++;
}
return tempArray;
}
//Insertion Sort Method
public int[] insertion(int[] a) {
swapFreqs = 0;
compFreqs = 0;
int[] tempArray = new int[a.length];
tempArray = a;
for (int i = 0; i<a.length; i++) {
for (int j = i; j>0; j--) {
if (tempArray[j] <= tempArray[j-1]) {
int smallest = tempArray[j];
tempArray[j] = tempArray[j-1];
tempArray[j-1] = smallest;
swapFreqs++;
}
compFreqs++;
}
}
return tempArray;
}
public int getComp() {
return compFreqs;
}
public int getSwap() {
return swapFreqs;
}
public int[] getnums(){
return nums;
}
}