After codingbat, my programming challenge is to solve 100 problems from UVA online judge.
This is more than doable! after finishing this milestone, i will solve another 100, another 100.... Up to infinity!
I follow the tip to master all major algorithms. I have problems with mergesort - i needed to understand it. So in this version i include lots of print statements to see how arrays are filled.
public class mergesort{
static void merge(int a[], int start, int pivot, int finish){
System.out.println("\n\n*********************") ;
int tmp[] = new int[finish - start +1] ;
System.out.println("temp array created! len " + tmp.length) ;
for(int i = 0 ; i < tmp.length;i++) tmp[i] = 0 ;
int I = start ;
int J = pivot +1 ;
int K = 0 ;
while((I <= pivot)&& ( J <= finish) ){
System.out.println("comparing elements: " + a[I] +" and "+ a[J]) ;
if(a[I] < a[J]){
System.out.println(a[I] + " inserted") ;
tmp[K] = a[I] ; K++ ; I++ ;
printarray(tmp, tmp.length) ;
}
else{
System.out.println(a[J] + " inserted") ;
tmp[K] = a[J] ; K++ ; J++ ;
printarray(tmp, tmp.length) ;
}
}
if(I <= pivot){
System.out.println("still some left before middle") ;
while(I <= pivot){
printarray(tmp,tmp.length) ;
tmp[K++] = a[I++] ;
}
}
if( J<= finish){
System.out.println("still some left before end") ;
while(J<= finish){
printarray(tmp,tmp.length) ;
tmp[K++] = a[J++] ;
}
}
for(K = start ; K <= finish ; K++) a[K] = tmp[K-start] ;
return ;
}
static void mergesort(int a[], int start, int finish, String parent){
System.out.println("\n mergesort called, parent " + parent) ;
if(start < finish){
int pivot = (start + finish)/2 ;
System.out.println("\n\n\n\nsplitting into 2 arrays :" + start + " to " + pivot + ", " + (pivot+1) + " to " + finish ) ;
mergesort(a,start, pivot, "first") ;
mergesort(a, pivot+1, finish, "second") ;
merge(a, start, pivot, finish) ;
}
}
public static void printarray(int a[], int len){
for(int i = 0 ; i < len; i++) System.out.print("* " + a[i]) ;
System.out.println() ;
}
public static void main(String args[]){
int test[] = {4,5,6,7,11,12,10,20,30,40,1,2,3} ;
int len = test.length ;
System.out.println("len : " + len) ;
printarray(test,len) ;
mergesort(test,0, len-1, "") ;
printarray(test,len) ;
}
}