import java.io.*;
import java.util.*;
public class Sort{
private ArrayList<Integer>[] buckets=new ArrayList[10];
private int[] a;
public Sort(int n){
Random r=new Random();
a=new int[n];
for (int i=0;i<10;i++){
buckets[i]=new ArrayList<Integer>();
}
for (int i=0;i<n;i++){
a[i]=r.nextInt(8999)+1000;
}
}
public String toString(){
return Arrays.toString(a);
}
public String printBuckets() {
return Arrays.toString(buckets);
}
public void Radex(){
int[] temp=new int[a.length];
int value;
int n=0;
while (n<4){
for (int i=0;i<a.length;i++){
value=(int)((a[i]/(Math.pow(10,n))) % 10);
buckets[value].add(a[i]);
}
//System.out.println(printBuckets());
int k=0;
while (k<temp.length){
for (int i=0;i<buckets.length;i++){
if (buckets[i].size()!=0){
for (int j=0;j<buckets[i].size();j++){
temp[k]=buckets[i].get(j);
k=k+1;
}
}
}
}
a=temp;
for (int i=0;i<buckets.length;i++){
buckets[i]=new ArrayList<Integer>();
}
n=n+1;
}
//System.out.println(this);
}
public void bsort(){
// a=this.a;
int swaps=0;
int k=0;
while (k<a.length){
for (int i=0;i<a.length-1;i++){
if (a[i]>a[i+1]){
int b=a[i+1];
a[i+1]=a[i];
a[i]=b;
swaps=swaps+1;
}
}
k=k+1;
}
}
public int findMin(int[]b, int start){
int min=start;
for (int i=start;i<b.length;i++){
if (b[i]<b[min]){
min=i;
}
}
return min;
}
public void sSort(){
int n=0;
while (n<a.length){
for (int i=n;i<a.length;i++){
int k= findMin(a,i);
if (a[i]>a[k]){
int r=a[k];
a[k]=a[i];
a[i]=r;
}
}
n=n+1;
}
}
public void iSort(){
int temp=0;
for (int i=0;i<a.length;i++){
temp=a[i];
for (int j=0;j<a.length;j++){
if (a[j]>a[j+1]){
a[j+1]=a[j];
a[j+1]=temp
}
}
}
}
public static void main(String[] args){
Sort s= new Sort(10);
System.out.println(s);
s.sSort();
System.out.println(s);
/* System.out.println(s);
System.out.println("-------------------------");
long start=System.currentTimeMillis();
s.bsort();
long end=System.currentTimeMillis();
System.out.println("Bubble Sort: "+(end-start));
// System.out.println(s);
System.out.println("-------------------------");
start=System.currentTimeMillis();
s.Radex();
end=System.currentTimeMillis();
System.out.println("Radex Sort: "+(end-start));
*/
}
}