Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package aufgabe1InsertionSort;
- public class Mergesort extends CountingSorter implements Sorter
- {
- private int[] a;
- private int[] b; // Hilfsarray
- private int n;
- public void sort(int[] a)
- {
- this.a=a;
- n=a.length;
- // je nach Variante entweder/oder:
- b=new int[(n+1)/2]; b=new int[n];
- mergesort(0, n-1);
- }
- private void mergesort(int lo, int hi)
- {
- if (lo<hi)
- {
- int m=(lo+hi)/2;
- mergesort(lo, m);
- mergesort(m+1, hi);
- merge(lo, m, hi);
- }
- }
- private void merge(int lo, int m, int hi)
- {
- int i, j, k;
- // beide Hälften von a in Hilfsarray b kopieren
- for (i=lo; i<=hi; i++)
- b[this.c(i)]=a[this.c(i)];
- i=lo; j=m+1; k=lo;
- // jeweils das nächstgrößte Element zurückkopieren
- while (i<=m && j<=hi)
- if (b[this.c(i)]<=b[this.c(j)])
- a[this.c(k++)]=b[this.c(i++)];
- else
- a[this.c(k++)]=b[this.c(j++)];
- // Rest der vorderen Hälfte falls vorhanden zurückkopieren
- while (i<=m)
- a[this.c(k++)]=b[this.c(i++)];
- }
- } // end class MergeSorter
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement