Advertisement
Zidinjo

Mergesort

Jun 16th, 2015
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. package aufgabe1InsertionSort;
  2.  
  3. public class Mergesort extends CountingSorter implements Sorter
  4. {
  5. private int[] a;
  6. private int[] b; // Hilfsarray
  7. private int n;
  8.  
  9. public void sort(int[] a)
  10. {
  11. this.a=a;
  12. n=a.length;
  13. // je nach Variante entweder/oder:
  14. b=new int[(n+1)/2]; b=new int[n];
  15. mergesort(0, n-1);
  16. }
  17.  
  18. private void mergesort(int lo, int hi)
  19. {
  20. if (lo<hi)
  21. {
  22. int m=(lo+hi)/2;
  23. mergesort(lo, m);
  24. mergesort(m+1, hi);
  25. merge(lo, m, hi);
  26. }
  27. }
  28.  
  29. private void merge(int lo, int m, int hi)
  30. {
  31. int i, j, k;
  32.  
  33. // beide Hälften von a in Hilfsarray b kopieren
  34. for (i=lo; i<=hi; i++)
  35. b[this.c(i)]=a[this.c(i)];
  36.  
  37. i=lo; j=m+1; k=lo;
  38. // jeweils das nächstgrößte Element zurückkopieren
  39. while (i<=m && j<=hi)
  40. if (b[this.c(i)]<=b[this.c(j)])
  41. a[this.c(k++)]=b[this.c(i++)];
  42. else
  43. a[this.c(k++)]=b[this.c(j++)];
  44.  
  45. // Rest der vorderen Hälfte falls vorhanden zurückkopieren
  46. while (i<=m)
  47. a[this.c(k++)]=b[this.c(i++)];
  48. }
  49. } // end class MergeSorter
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement