Advertisement
Guest User

Untitled

a guest
May 25th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.14 KB | None | 0 0
  1. /*
  2. Programmieren Sie in Java analog zu Aufgabe 4-1 eine Auswertung des
  3. Algorithmus Mergesort (Sortieren eines Arrays von Ganzzahlen, wie ab
  4. Folie 12 gezeigt). Gezählt werden sollen dabei die Anzahl der
  5. Vergleiche und die Anzahl der
  6. Zuweisungen ins Ausgabearray.
  7. Erweitern Sie die Statistik außerdem um die Anzahl der Aufrufe der
  8. Methode „mergeSort“. Erweitern Sie dazu die Klasse SortStatistik
  9. um die Methoden setAufrufe und getAufrufe. Die statistischen Daten
  10. sollen also vom Statistik-Objekt
  11. mit folgenden Methoden erfragt werden können (Rückgabetyp jeweils
  12. int): getAufrufe(), getVergleiche(), getArrayZuweisungen().
  13. */
  14.  
  15. public class MergeCount {
  16.     private int[] aus;
  17.     private int[] b;
  18.     private int anz;
  19.     private int aufrufe, vergleiche, arrayZuweisungen;
  20.     private SortStatistik s;
  21.  
  22.     public SortStatistik sort(int[] ein){
  23.         aus = ein;
  24.         anz = ein.length;
  25.         vergleiche = 0;
  26.         aufrufe = 0;
  27.         arrayZuweisungen = 0;
  28.  
  29.         b=new int[anz];
  30.         mergeSort(0, anz-1);
  31.  
  32.         s = new SortStatistik();
  33.         s.setDaten(aus);
  34.         s.setArrayZuweisungen(arrayZuweisungen);
  35.         s.setAufrufe(aufrufe);
  36.         s.setVergleiche(vergleiche);
  37.         return s;
  38.     }
  39.  
  40.     public void mergeSort(int lo, int hi) {
  41.         aufrufe++;
  42.         if (lo<hi){
  43.             int m=(lo+hi)/2;
  44.             mergeSort(lo, m);
  45.             mergeSort(m+1, hi);
  46.             merge(lo, m, hi);
  47.         }
  48.     }
  49.     void merge(int lo, int m, int hi){
  50.         int i, j, k;
  51.         // beide Hälften von a in Hilfsarray b kopieren
  52.         for (i=lo; i<=hi; i++) {
  53.             b[i]=aus[i];
  54.         }
  55.         i=lo; j=m+1; k=lo;
  56.         // jeweils das nächstgrößte Element zurückkopieren
  57.         while (i<=m && j<=hi) {
  58.             if (b[i]<=b[j]) {
  59.                 vergleiche++;
  60.                 arrayZuweisungen++;
  61.                 aus[k++]=b[i++];
  62.             } else {
  63.                 vergleiche++;
  64.                 arrayZuweisungen++;
  65.                 aus[k++]=b[j++];
  66.             }
  67.         }
  68.         // Rest der vorderen Hälfte falls vorhanden zurückkopieren
  69.         while (i<=m) {
  70.             arrayZuweisungen++;
  71.             aus[k++]=b[i++];
  72.         }
  73.         while (j<=hi) {
  74.             arrayZuweisungen++;
  75.             aus[k++]=b[j++];
  76.         }
  77.     }
  78.     public int[] getAus() {
  79.         return aus;
  80.     }
  81.  
  82.  
  83.     public class SortStatistik {
  84.         private int[] daten;
  85.         private int aufrufe, vergleiche, arrayZuweisungen;
  86.  
  87.         public void setAufrufe(int a) {
  88.             aufrufe = a;
  89.         }
  90.         public int getAufrufe() {
  91.             return aufrufe;
  92.         }
  93.  
  94.         public void setDaten(int[] d){
  95.             daten = d;
  96.         }
  97.         public int[] getDaten(){
  98.             return daten;
  99.         }
  100.         public void setVergleiche(int v){
  101.             vergleiche = v;
  102.         }
  103.         public int getVergleiche(){
  104.             return vergleiche;
  105.         }
  106.         public void setArrayZuweisungen(int t){
  107.             this.arrayZuweisungen = t;
  108.         }
  109.         public int getArrayZuweisungen(){
  110.             return arrayZuweisungen;
  111.         }
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement