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);
  }
}