0.8
Sorting media using crowdsourcing.   
Doxygen
LIRIS

SplitSort.java

Go to the documentation of this file.
00001 package sorter;
00002 
00003 import java.util.*;
00004 
00005 
00020 public class SplitSort
00021 {
00022 
00023       00024       // Fields
00025       00026 
00034       private List<Integer> greater;
00040       private List<Integer> smaller;
00046       private List<Integer[]> sorted;
00053       private List<Boolean> comparisons;
00057       private Integer numberOfElements;
00061       private Integer minimalSize;
00062 
00063       00064       // Constructor
00065       00066 
00081       public SplitSort( List<Integer[]> init, Integer min )
00082       {
00083             this.sorted = new ArrayList<Integer[]>();
00084             this.greater = new ArrayList<Integer>();
00085             this.smaller= new ArrayList<Integer>();
00086             this.comparisons = new ArrayList<Boolean>();
00087             this.minimalSize = min;
00088             this.numberOfElements = 0;
00089             for (Integer[] array : init)
00090             {
00091                   this.sorted.add(array.clone());
00092                   this.numberOfElements += array.length ;
00093             }
00094       }
00095       
00096       00097       // Methods
00098       00099 
00100 
00111       public Boolean notFinished()
00112       {
00113             int count = 0;
00114             for (Integer[] tab : this.sorted)
00115                   if (tab.length > this.minimalSize)
00116                         break;
00117                   else
00118                         count+=tab.length;
00119             return (count != this.numberOfElements);
00120       }
00121       
00122 
00134       public void iteration()
00135       {
00136             this.comparisons.clear();
00137             this.greater.clear();
00138             this.smaller.clear();
00139             for ( Integer[] tab : this.sorted)
00140                   if (tab.length > this.minimalSize)
00141                         addComparisons(tab);
00142       }
00143 
00144 
00154       private void addComparisons( Integer[] tab )
00155       {
00156             for (int i=0; i<tab.length; i++)
00157             {
00158                   this.greater.add(tab[i]);
00159                   this.smaller.add(tab[0]);
00160             }
00161       }
00162 
00163 
00164 
00176       public void endIteration( List<Boolean> comparisons )
00177       {
00178             int i=0;
00179             this.comparisons = comparisons;
00180             while (i<this.sorted.size())
00181                   if ( this.sorted.get(i).length > this.minimalSize)
00182                         i+=insertion(i);
00183                   else
00184                         i+=1;
00185       }
00186 
00187 
00206       private int insertion( int rank )
00207       {
00208             // initialisations
00209             Integer[] tab = this.sorted.get(rank);
00210             int pivot = tab[0];
00211             List<Integer> small = new ArrayList<Integer>() ;
00212             List<Integer> great = new ArrayList<Integer>() ;
00213             int pivotIndex = this.smaller.indexOf(pivot);
00214             
00215             // creation of the arrays to add
00216             for (int j=0; j<tab.length; j++)
00217             {
00218                   int g = this.greater.get(pivotIndex+j);
00219                   int s = this.smaller.get(pivotIndex+j);
00220                   if (this.comparisons.get(pivotIndex+j))
00221                   {
00222                         if (s!=pivot) small.add(s);
00223                         if (g!=pivot) great.add(g);
00224                   }
00225                   else
00226                   {
00227                         if (g!=pivot) small.add(g);
00228                         if (s!=pivot) great.add(s);
00229                   }
00230             }
00231             Integer[] great_array = great.toArray(new Integer[0]);
00232             Integer[] array_pivot =  { pivot };
00233             Integer[] small_array = small.toArray(new Integer[0]);
00234             
00235             // removing and insertion of the right arrays
00236             this.sorted.remove(rank);
00237             int ins = 1;      // number of arrays inserted (at least the pivot)
00238             if (great_array.length>0)
00239             {
00240                   this.sorted.add(rank,great_array);
00241                   ins++;
00242             }
00243             this.sorted.add(rank,array_pivot);
00244             if (small_array.length>0)
00245             {
00246                   this.sorted.add(rank,small_array);
00247                   ins++;
00248             }
00249             
00250             // the number of arrays inserted is returned
00251             return ins;
00252       }
00253 
00254 
00264       public Integer[] getFinalResult(  )
00265       {
00266             List<Integer> result = new ArrayList<Integer>();
00267             for(int i=0; i<this.sorted.size(); i++)
00268                   for (int j=0; j<this.sorted.get(i).length; j++)
00269                         result.add(this.sorted.get(i)[j]);
00270             return result.toArray(new Integer[0]);
00271       }
00272 
00273 
00281       public void display(  )
00282       {
00283             for (Integer[] tab : this.sorted)
00284             {
00285                   System.out.print(" [ ");
00286                   for (Integer i : tab)
00287                   {
00288                         System.out.print(i);
00289                         System.out.print(" ");
00290                   }
00291                   System.out.print("] ");
00292             }
00293       }
00294 
00295 
00296   
00297       00298       // Accessor methods
00299       00300 
00301 
00306       public List<Integer> getGreater ( )
00307       { return this.greater; }
00308       
00309       
00314       public List<Integer> getSmaller ( )
00315       { return this.smaller; }
00316 
00317       
00322       public List<Integer[]> getSorted()
00323       { return this.sorted; }
00324 
00325 }
 All Classes Namespaces Files Functions Variables