import java.io.*;
import java.util.*;
public class RadixSort {
private int[] nums;
private ArrayList<Integer>[] buckets;
public String toString() {
return "Nums: " + Arrays.toString(nums);
}
public String printBuckets() {
return "Buckets: " + Arrays.toString(buckets);
}
public RadixSort(int n) {
nums = new int[n];
buckets = new ArrayList[nums.length];
for (int i = 0; i < nums.length; i++) {
buckets[i] = new ArrayList<Integer>();
}
Random r = new Random();
for (int i = 0; i < nums.length; i++) {
nums[i] = r.nextInt(999999)+1;
}
}
public void sortIntoBuckets(int n) {
int value;
for (int i = 0;i<nums.length;i++) {
value = (int)((nums[i]/(Math.pow(10,n))) % 10);
buckets[value].add(nums[i]);
}
}
public void copyIntoArray() {
int[] temp = new int[nums.length];
int i=0;
while (i < temp.length) {
for (int j = 0; j < buckets.length; j++) {
if( buckets[j].size() != 0) {
for (int k=0; k < buckets[j].size();k++) {
temp[i] = buckets[j].get(k);
i++;
}
}
}
}
nums = temp;
}
public void RadixSort() {
for (int n = 0; n < 4; n++) {
sortIntoBuckets(n);
copyIntoArray();
ArrayList<Integer>[] temp = new ArrayList[nums.length];
for (int i = 0; i < temp.length; i++) {
temp[i] = new ArrayList<Integer>();
}
buckets = temp;
}
}
public void bubbleSort() {
int k = 1;
int swaps = 0;
boolean swapped = false;
int comparisons = 0;
while (k <= nums.length) {
swapped = false;
System.out.println(this + "Comparisons: " + comparisons);
for (int i = 0; i < nums.length - k; i++) {
comparisons++;
if (nums[i] > nums[i+1]) {
swaps++;
swapped = true;
int n = nums[i+1];
nums[i+1] = nums[i];
nums[i] = n;
}
}
if (!swapped) {
break;
}
k++;
}
System.out.println("Swaps: " + swaps);
System.out.println("Comparisons: " + comparisons);
}
}