Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.19 KB | None | 0 0
  1. /**
  2.  * @author bzibae2s
  3.  *
  4.  */
  5.  
  6. import java.util.Comparator;
  7.  
  8. public class FeldUtil {
  9.  
  10. //Übung 8 Aufgabe 2 Binäre Suche
  11.     public static <T> int sucheBinaerPos(Feld<T> f, Comparable<T> o) {
  12.         int l = 0;
  13.         int r = f.size();
  14.         while(l < r) {
  15.             int m = (l + r) / 2;
  16.             if(o.compareTo(f.get(m)) <= 0 ) {
  17.                 r = m;
  18.             }
  19.             else {
  20.                 l = m + 1;
  21.             }
  22.         }
  23.         return l;
  24.     }
  25.        
  26.     public static <T> int sucheBinaer(Feld<T> f, Comparable<T> o) {
  27.         int p = sucheBinaerPos(f, o);
  28.         return p < f.size() &&  o.compareTo(f.get(p)) == 0 ? p : -1;
  29.         }
  30.  
  31. //Übung 9 Aufgabe 2
  32.     //Selection Sort Method
  33.     public static <T> void sortSelect(Feld<? extends T> feld, java.util.Comparator<? super T> comp) {
  34.         for (int i = 0; i < feld.size() - 1; i++) {
  35.             feld.swap(i, minPos(feld, comp, i));
  36.         }
  37.     }
  38.     //Hilfsmethode minPos liefert Position wo kleines Element
  39.     //mittels for-Schleife wie in VL
  40.     private static <T> int minPos(Feld<? extends T> feld, Comparator<? super T> comp, int i) {
  41.         T p = feld.get(i);
  42.         int res = i;
  43.         for (++i; i < feld.size(); ++i) {
  44.             if(comp.compare(p, feld.get(i)) > 0) {
  45.                 res = i;
  46.                 p = feld.get(res);
  47.             }
  48.         }
  49.         return res;
  50.     }
  51.    
  52.     //mittels Iterator (test)
  53.     /* private static <T> int minPos2(Feld<T> feld, Comparator<T> comp, int i) {
  54.         T p = feld.get(i);
  55.         int res = i;
  56.         java.util.Iterator<T> it = feld.iterator(++i);
  57.         while(it.hasNext()) {
  58.             if(comp.compare(p, it.next()) > 0) {
  59.                 p = feld.get(i);
  60.                 res = i;
  61.             }
  62.             i++;
  63.         }
  64.         return res;
  65.     }
  66.     */
  67.     //b) Insert Sort
  68.     public static <T> void sortInsert(Feld<? extends T> feld, java.util.Comparator<? super T> comp) {
  69.    
  70.         for (int i = 1; i < feld.size(); ++i) {
  71.             for (int j = i; j > 0 && comp.compare(feld.get(j-1), feld.get(j)) > 0; --j) {
  72.                 feld.swap(j-1, j);             
  73.             }
  74.         }
  75.     }
  76.        
  77.     //c) Bubble Sort
  78.     public static <T> void sortBubble(Feld<? extends T> feld, java.util.Comparator<? super T> comp) {
  79.         int p = feld.size() - 1;
  80.         while (p > 0) {
  81.             int r = p;
  82.             p = 0;
  83.             for(int i = 0; i < r; ++i) {
  84.                 if(comp.compare(feld.get(i), feld.get(i+1)) > 0) {
  85.                     feld.swap(i, i + 1);
  86.                     p = i;
  87.                 }
  88.             }
  89.         }
  90.     }
  91.        
  92.     //Aufgabe 3a)
  93.     //Merge Sort
  94.     public static <T> void sortMerge(Feld<? extends T> feld, java.util.Comparator<? super T> comp) {
  95.         sortMerge(feld, comp, 0, feld.size());
  96.     }
  97.    
  98.     private static <T> void sortMerge(Feld<T> feld, java.util.Comparator<? super T> comp, int l, int r) {
  99.         if(r - l <= 1) {
  100.             return;
  101.         }
  102.         int m = (l + r) / 2;
  103.        
  104.         sortMerge(feld, comp, l, m);
  105.         sortMerge(feld, comp, m, r);
  106.        
  107.         Feld<T> ff = new FeldFix<>(r-l);
  108.         Feld<T> fc = new FeldCount<>(ff);
  109.        
  110.         int i = 0;
  111.         int jl = l;
  112.         int jr = m;
  113.        
  114.         while(jl < m && jr < r) {
  115.             if(comp.compare(feld.get(jl), feld.get(jr)) <= 0) {
  116.                 fc.set(i++, feld.get(jl++));
  117.             }
  118.             else {
  119.                 fc.set(i++, feld.get(jr++));
  120.             }
  121.         }
  122.         while(jl < m) {
  123.             fc.set(i++, feld.get(jl++));
  124.         }
  125.         while(jr < r) {
  126.             fc.set(i++, feld.get(jr++));
  127.         }
  128.         for(int k = 0; k < fc.size(); ++k) {
  129.             feld.set(l+k, fc.get(k));
  130.         }
  131.    
  132.     }
  133.  
  134. //Übung 10 Aufgabe 2
  135.     //Quick-Sort
  136.     public static <T> void sortQuick(Feld<T> feld, java.util.Comparator<? super T> comp, PivotPicker<T> p) {
  137.         sortQuick(feld, comp, p, 0, feld.size());
  138.     }
  139.    
  140.     public static <T> void sortQuick(Feld<T> feld, java.util.Comparator<? super T> comp, PivotPicker<T> p, int l, int r) {
  141.         if(l >= r) {
  142.             return;
  143.         }
  144.         PivotPickerMedian<T> pP = new PivotPickerMedian<>(comp);
  145.         int pivot = pP.pivot(feld, l, r);
  146.         feld.swap(pivot, r); //tausche Pivot nach rechts
  147.         int il = l;         //Linksaussen
  148.         int ir = r;         //Rechtsaussen
  149.         do {
  150.             while(il <= ir && comp.compare(feld.get(il), feld.get(r)) < 0) {
  151.                 ++il; //nach innen laufen von links
  152.             }
  153.             while(il < ir && comp.compare(feld.get(ir), feld.get(r)) >= 0) {
  154.                 --ir; //nach innen laufen von rechts
  155.             }
  156.             if(il < ir) {   //Fehlstand?
  157.                 feld.swap(il++, ir); //tausche linken mit rechtem Wert
  158.             }
  159.         } while(il <= --ir);
  160.         pivot = il;     //Pivot folgt auf linken Teil
  161.         feld.swap(pivot, r); //Pivot an richtige Position tauschen
  162.        
  163.         sortQuick(feld, comp, pP, l, pivot-1);  //linken Teil rek. sortieren
  164.         sortQuick(feld, comp, pP, pivot+1, r);  //rechten Teil rek. sortieren
  165.        
  166.        
  167.     }
  168.  
  169.        
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement