AuK/Teile und Herrsche 1 SS10/JavaMerge

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Java</language>
== Javabeispiel für Mergesort ==

<code id="4bbdfcc36a146">
public class MergeSort {

	  
	    private static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi) {
	       int i = lo, j = mid;
	       for (int k = lo; k < hi; k++) {
	          if      (i == mid)                 aux[k] = a[j++];
	          else if (j == hi)                  aux[k] = a[i++];
	          else if (a[j].compareTo(a[i]) < 0) aux[k] = a[j++];
	          else                               aux[k] = a[i++];
	       }

	       
	       for (int k = lo; k < hi; k++)
	          a[k] = aux[k];
	    }


	   
	    public static void sort(Comparable[] a, Comparable[] aux, int lo, int hi) {

	       // Grundfall
	    	
	       if (hi - lo <= 1) return;

	       // rekursives Sortieren jeder Hälfte
	       
	       int mid = lo + (hi - lo) / 2;
	       sort(a, aux, lo, mid);
	       sort(a, aux, mid, hi);

	       // Zusammenführen der Werte
	       
	       merge(a, aux, lo, mid, hi);
	    }


	   // Sortierung der Liste
	    
	    public void sort(Comparable[] a) {
	        int N = a.length;
	        Comparable[] aux = new Comparable[N];
	        sort(a, aux, 0, N);
	    }


	   // Untersuchung ob die Liste Sortiert ist
	    
	    public boolean isSorted(Comparable[] a) {
	        for (int i = 1; i < a.length; i++)
	            if (a[i].compareTo(a[i-1]) < 0) return false;
	        return true;
	    }

	   // Zeigen des Ergebnisses
	    
	    public void show(Comparable[] a) {
	        for (int i = 0; i < a.length; i++)
	            System.out.println(a[i]);
	    }
}
</code>
<eval id="4bc05e7d08c43">
new int[] a{ 2, 5, 4, 7, 6, 3, 0, 20};
sort(a);
show(a)
</eval>