Prinzip: Teile und herrsche!
Algorithmus | Beispiel | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Trennelement = 3
Trennelement = 3
Trennelement = 3
Trennelement = 3
Der untere Zeiger (u) und der obere Zeiger (o) haben sich gekreuzt, es entstehen neue Teilfelder. Sortiere weiter: Teilfolge 1 mit Trennelement = 0
und Teilfolge 2 mit Trennelement = 4
|
Zeitabhängigkeit:
- schlechtester Fall: quadratisch
- mittlerer und bester Fall: n*log(n)
/**
Durch diese Methode wird das Sortieren gestartet.
*/
public void sort()
{
sort(0, a.length - 1);
}
/* Diese Methode sort ist u.a. für das Auslösen des Sortiervorganges in den entstehenen Teilfelder verantwortlich. Sie ist rekursiv! */
public void sort(int from, int to)
{
if (from < to)
{
int p = partition(from, to);
sort(from, p);
sort(p + 1, to);
}
}
/* Die Methode partition realisiert Schritt zwei: Durchlaufen einer gegebenen Reihung und eventuell notwendige Tauschoperationen. */
private int partition(int from, int to)
{
int pivot = a[from];
int i = from - 1;
int j = to + 1;
while (i < j)
{
i++; while (a[i] < pivot) i++;
j--; while (a[j] > pivot) j--;
if (i < j) swap(i, j);
}
return j;
}
/**
Die Methode swap tauscht zwei Elemente der Reihung.
*/
private void swap(int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
Quelltexte im Zip-Format zum herunter laden
Aufgaben:
- Erläutern Sie, wie Teilfolge 1 weiter sortiert wird!
- Stellen Sie die Methoden sort(int from, int to) und partition(int from, int to) in je einem Struktogramm dar!
- Untersuchen Sie das Zeitverhalten des Algorithmus experimentell!