Merge sort num array de objectos

Eu tenho um trabalho que consiste em ordenar um array de objectos usando o merge sort, estou tentando ordenar usando o atributo codigo que é um inteiro, so que apanho sepre uma excepcao do tipo: java.lang.NullPointerException…
alguma idea…

[code]public class Universidade {
private int cod;
private String nome;

public Universidade() {}

public Universidade(int cod, String nome) {
	this.cod = cod;
	this.nome = nome;
	
	raiz = null;
	dir = null;
}
public int getCod() {
	return cod;
}
public void setCod(int cod) {
	this.cod = cod;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}

}

public class Tabela {
int last;
Universidade[]univ=new Universidade[10];

public Tabela(){
	this.last=-1;
	univ=new Universidade[10];
	
}
public boolean isEmpty(){
   if(last==-1)	
     return true;
     return false;
}
public boolean isFull(){
	if(last==univ.length-1)
	return true;
	return false;
}
//metodo que insere uma universidade sequencialmente
public void InsertUniv(Universidade a){
	if(!isFull()){
	   last++;
	   univ[last]=a;
	}
	else
		System.out.println("Tabela Cheia");
}
public void viewUniversidades(){
	for (int i = 0; i < last+1; i++) {
		System.out.println((i+1)+" - "+univ[i].getNome());
	}		
}
    public void mergeSort()          
{                              
Universidade[]u = new Universidade[this.univ.length];
recMergeSort(u, 0, this.last);
}
private void recMergeSort(Universidade[]u, int min, int max)
{
  if(min == max)            
     return;                         
  else
  {                                    
    int mid = (min+max) / 2;
     
    recMergeSort(u, min, mid);
     
    recMergeSort(u, mid+1, max);
     
    merge(u, min, mid+1, max);
  } 
}  
 
private void merge(Universidade[]u, int baixo,int alto, int max)
{
   int j = 0;                             
   int lowerBound = baixo;
   int mid = alto-1;
   int n = max-lowerBound+1;   
   while(baixo <= mid && alto <= max)
       if( univ[baixo].getCod() < univ[alto].getCod())
    	   
           u[j++] = u[baixo++];
       else
           u[j++] = u[alto++];

   while(baixo <= mid)
           u[j++] = u[baixo++];

   while(alto <= max)
       u[j++] = u[alto++];

    for(j=0; j<n; j++)
       this.univ[lowerBound+j] = u[j];

}
}
[/code]

Por favor ajudem, coloquei as mnhas classes acima pra me ajudarem a identificar o problema…