import java.io.*;
import java.util.*;
public class Sorting {
public static void main(String[] args){
Sorting s = new Sorting();
Random r = new Random();
int[] a = new int[10000];
for (int i = 0; i <10000; i ++) {
a[i] = r.nextInt(899)+100;
}
int[] b = new int[100000];
for (int i = 0; i <100000; i ++) {
b[i] = r.nextInt(899)+100;
}
int[] c = new int[1000000];
for (int i = 0; i <1000000; i ++) {
c[i] = r.nextInt(899)+100;
}
int[] g = new int[10000];
for (int i = 0; i <10000; i ++) {
g[i] = r.nextInt(899)+100;
}
int[] h = new int[100000];
for (int i = 0; i <100000; i ++) {
h[i] = r.nextInt(899)+100;
}
int[] i = new int[1000000];
for (int n = 0; n <1000000; n ++) {
i[n] = r.nextInt(899)+100;
}
long t = System.currentTimeMillis();
s.bsort(a);
System.out.println(System.currentTimeMillis()-t);
t = System.currentTimeMillis();
s.radixSort(a);
System.out.println(System.currentTimeMillis()-t);
t = System.currentTimeMillis();
s.bsort(b);
System.out.println(System.currentTimeMillis()-t);
t = System.currentTimeMillis();
s.radixSort(b);
System.out.println(System.currentTimeMillis()-t);
t = System.currentTimeMillis();
s.bsort(c);
System.out.println(System.currentTimeMillis()-t);
t = System.currentTimeMillis();
s.radixSort(c);
System.out.println(System.currentTimeMillis()-t);
t = System.currentTimeMillis();
s.bsort(g);
System.out.println(System.currentTimeMillis()-t);
t = System.currentTimeMillis();
s.radixSort(g);
System.out.println(System.currentTimeMillis()-t);
t = System.currentTimeMillis();
s.bsort(i);
System.out.println(System.currentTimeMillis()-t);
t = System.currentTimeMillis();
s.radixSort(i);
System.out.println(System.currentTimeMillis()-t);
}
public int[] bsort(int[] a){
int swaps = 0;
int checks = 0;
for(int b=0; b<a.length-1; b++){
for(int c = 0; c<a.length-b-1; c++){
if (a[c] > a[c+1]){
int tmp = a[c];
a[c] = a[c+1];
a[c+1] = tmp;
swaps++;
}
checks++;
}
}
System.out.println(swaps);
System.out.println(checks);
return a;
}
public static int exp(int i, int n){//lolwut
int result = 1;
for (int a = 0; a<n; a++){
result = result * i;
}
return result;
}
public int[] radixSort(int[] i){
int n;
int length = String.valueOf(i[0]).length();
ArrayList[] buckets = new ArrayList[i.length];
for (int a=0; a<i.length; a++){
buckets[a] = new ArrayList<Integer>();
}
for(n=0; n<length; n++){
for (int a=0; a<i.length; a++){
int d = (i[a] / exp(10,n)) % 10;
buckets[d].add(i[a]);
}
int c=0;
for (int a=0; a<buckets.length; a++){
int b=0;
while (b < buckets[a].size()){
i[c]=(Integer)buckets[a].get(b);
b++;
c++;
}
}
for (int a=0; a<i.length; a++){
buckets[a] = new ArrayList<Integer>();
}
}
return i;
}
}