Comparatie intre diferite tipuri de sortari avansate. - Bucket Sort - implementare in J++.
Inapoi
public class BucketSortAlgorithm extends SortAlgorithm{
class KEY
{ public SortDouble inf;
public int idx;
}
KEY v[];
class ELEMENT
{ KEY inf;
ELEMENT next;
}
SortDouble inf(ELEMENT l)
{ return l.inf.inf;
}
int idx(ELEMENT l)
{ return l.inf.idx;
}
ELEMENT next(ELEMENT l)
{ return l.next;
}
int consv(ELEMENT l,int i)
{ for(;l!=null;l=next(l),i++)
{ v[i].inf=inf(l);
v[i].idx=idx(l);
}
return i;
}
ELEMENT cons(SortDouble el,int idx,ELEMENT l)
{ ELEMENT p;
KEY k;
p=new ELEMENT();
k=new KEY();
k.inf=el;
k.idx=idx;
p.inf=k;
p.next=l;
return p;
}
ELEMENT insord(KEY el,ELEMENT l)
{ if(l==null)
return cons(el.inf,el.idx,null);
if(compHigher(el.inf,inf(l)))
l.next=insord(el,next(l));
else
return cons(el.inf,el.idx,l);
return l;
}
void sort(java.util.Vector a) throws Exception
{ ELEMENT b[];
KEY tmp;
int i,poz;
v=new KEY[a.size()];
for(i=0;i<a.size();i++)
{ v[i]=new KEY();
v[i].inf=new SortDouble((double)(((Comparable)(a.elementAt(i))).value())/201.0);
v[i].idx=i;
}
b=new ELEMENT[a.size()];
for(i=0;i<a.size();i++)
b[i]=null;
for(i=0;i<v.length;i++)
{ poz=(int)(v[i].inf.doubleValue()*v.length);
b[poz]=insord(v[i],b[poz]);
}
for(i=0,poz=0;i<v.length;i++)
poz=consv(b[i],poz);
for(i=0;i<a.size();i++)
makeidxequal(i,((Comparable)(a.elementAt(v[i].idx))).value(),v[i].idx);
}
}