Hallo,
ich schreibe Anfang Oktober eine Prüfung und da werden mit ziemlicher Sicherheit auch Sortierverfahren vorkommen. BubbleSort hab ich mittlerweile mehr oder weniger drauf, aber die anderen beiden Sortierverfahren (Insertion + Selection) krieg ich einfach nicht in meinen Kopf.
Die Verfahren an sich kann ich mit leichten Schwierigkeiten nachvollziehen, aber das reicht nicht um die Verfahren ohne Hilfe (Musterlösung) zu schreiben. Gibt es da nicht irgendeinen Trick sich die Vorgänge zu merken oder eine leichter zu verstehende Abwandlung meiner Verfahren? Wie lernt ihr solche Sachen?
Würde mich freuen wenn mir da jemand nützliche Tipps geben kann.
ich schreibe Anfang Oktober eine Prüfung und da werden mit ziemlicher Sicherheit auch Sortierverfahren vorkommen. BubbleSort hab ich mittlerweile mehr oder weniger drauf, aber die anderen beiden Sortierverfahren (Insertion + Selection) krieg ich einfach nicht in meinen Kopf.
Die Verfahren an sich kann ich mit leichten Schwierigkeiten nachvollziehen, aber das reicht nicht um die Verfahren ohne Hilfe (Musterlösung) zu schreiben. Gibt es da nicht irgendeinen Trick sich die Vorgänge zu merken oder eine leichter zu verstehende Abwandlung meiner Verfahren? Wie lernt ihr solche Sachen?
Würde mich freuen wenn mir da jemand nützliche Tipps geben kann.
Code:
// Sortieren durch Einfügen (InsertionSort)
// ----------------------------------------
//
static void InsertionSort(int[] zahlen)
{
// Zwei Variablen zum Zählen der Vergleiche und Bewegungen
int AnzahlVergleiche = 0;
int AnzahlBewegungen = 0;
// Sortierverfahren InsertionSort mit Zählern
int merker = 0, k = 0;
for (int i=0; i < zahlen.length; i++)
{
k = 0;
AnzahlVergleiche++;
while ((k < i) & (zahlen[i] >= zahlen[k]))
{
k++;
AnzahlVergleiche++;
}
if (k != i)
{ AnzahlBewegungen++;
merker = zahlen[i];
for (int j = i; j > k; j--)
{
AnzahlBewegungen++;
zahlen[j] = zahlen[j-1];
}
AnzahlBewegungen++;
zahlen[k] = merker;
}
}
// Ausgabe der Vergleiche und Bewegungen
System.out.println("Anzahl Vergleiche: "+AnzahlVergleiche);
System.out.println("Anzahl Bewegungen: "+AnzahlBewegungen);
}
// Sortieren durch Auswahl (SelectionSort)
// ---------------------------------------
//
static void SelectionSort(int[] zahlen)
{
// Zwei Variablen zum Zählen der Vergleiche und Bewegungen
int AnzahlVergleiche = 0;
int AnzahlBewegungen = 0;
// Sortierverfahren SelectionSort mit Zählern
for(int i=0; i<zahlen.length; i++)
{
int min=i;
for(int j=i+1; j<zahlen.length; j++)
{
AnzahlVergleiche++;
if (zahlen[j]<zahlen[min])
min=j;
}
if (min != i)
{
AnzahlBewegungen += 3;
int temp = zahlen[i];
zahlen[i] = zahlen[min];
zahlen[min] = temp;
}
}
// Ausgabe der Vergleiche und Bewegungen
System.out.println("Anzahl Vergleiche: "+AnzahlVergleiche);
System.out.println("Anzahl Bewegungen: "+AnzahlBewegungen);
}