\documentclass{bschlangaul-aufgabe}
\bLadePakete{java}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 8},
  Thematik = {Sortieren von 15,4,10,7,1,8,10 mit Bubble- und Selectionsort},
  Referenz = 66115-2018-H.T2-A8,
  RelativerPfad = Examen/66115/2018/09/Thema-2/Aufgabe-8.tex,
  ZitatSchluessel = examen:66115:2018:09,
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Sortieralgorithmen, Bubblesort, Selectionsort, Algorithmische Komplexität (O-Notation)},
  EinzelpruefungsNr = 66115,
  Jahr = 2018,
  Monat = 09,
  ThemaNr = 2,
  AufgabeNr = 8,
}

Gegeben sei das folgende Feld $A$ mit $7$ Schlüsseln:
\index{Sortieralgorithmen}
\footcite{examen:66115:2018:09}

\begin{center}
[15, 4, 10, 7, 1, 8, 10]
\end{center}

\begin{enumerate}

%%
% (a)
%%

\item Sortieren Sie das Feld mittels des Sortierverfahrens
\emph{Bubblesort}. Markieren Sie jeweils, welche zwei Feldwerte
verglichen werden und geben Sie den Zustand des gesamten Feldes jeweils
neu an, wenn Sie eine Vertauschung durchgeführt haben.
\index{Bubblesort}

\begin{bAntwort}
% bschlangaul-werkzeug.java sortiere 15 4 10 7 1 8 10 -b
\begin{verbatim}
 15  4   10  7   1   8   10  Eingabe
 15  4   10  7   1   8   10  Durchlauf Nr. 1
>15  4<  10  7   1   8   10  vertausche (i 0<>1)
 4  >15  10< 7   1   8   10  vertausche (i 1<>2)
 4   10 >15  7<  1   8   10  vertausche (i 2<>3)
 4   10  7  >15  1<  8   10  vertausche (i 3<>4)
 4   10  7   1  >15  8<  10  vertausche (i 4<>5)
 4   10  7   1   8  >15  10< vertausche (i 5<>6)
 4   10  7   1   8   10  15  Durchlauf Nr. 2
 4  >10  7<  1   8   10  15  vertausche (i 1<>2)
 4   7  >10  1<  8   10  15  vertausche (i 2<>3)
 4   7   1  >10  8<  10  15  vertausche (i 3<>4)
 4   7   1   8   10  10  15  Durchlauf Nr. 3
 4  >7   1<  8   10  10  15  vertausche (i 1<>2)
 4   1   7   8   10  10  15  Durchlauf Nr. 4
>4   1<  7   8   10  10  15  vertausche (i 0<>1)
 1   4   7   8   10  10  15  Durchlauf Nr. 5
 1   4   7   8   10  10  15  Ausgabe
\end{verbatim}
\end{bAntwort}

%%
% (b)
%%

\item Sortieren Sie das Feld mittels des Sortierverfahrens
\emph{Selectionsort}. Markieren Sie jeweils, welche zwei Feldwerte
verglichen werden und geben Sie den Zustand des gesamten Feldes jeweils
neu an, wenn Sie eine Vertauschung durchgeführt haben.
\index{Selectionsort}

\begin{bAntwort}
% bschlangaul-werkzeug.java sortiere 15 4 10 7 1 8 10 -s
\begin{verbatim}
 15  4   10  7   1   8   10  Eingabe
 15  4   10  7   1   8   10* markiere (i 6)
>15  4   10  7   1   8   10< vertausche (i 0<>6)
 10  4   10  7   1   8*  15  markiere (i 5)
>10  4   10  7   1   8<  15  vertausche (i 0<>5)
 8   4   10  7   1*  10  15  markiere (i 4)
 8   4  >10  7   1<  10  15  vertausche (i 2<>4)
 8   4   1   7*  10  10  15  markiere (i 3)
>8   4   1   7<  10  10  15  vertausche (i 0<>3)
 7   4   1*  8   10  10  15  markiere (i 2)
>7   4   1<  8   10  10  15  vertausche (i 0<>2)
 1   4*  7   8   10  10  15  markiere (i 1)
 1  >4   7   8   10  10  15  vertausche (i 1<>1)
 1*  4   7   8   10  10  15  markiere (i 0)
>1   4   7   8   10  10  15  vertausche (i 0<>0)
 1   4   7   8   10  10  15  Ausgabe
\end{verbatim}
\end{bAntwort}

%%
% (c)
%%

\item Vergleichen Sie beide Sortierverfahren hinsichtlich ihres
Laufzeitverhaltens im \emph{best case}. Welches Verfahren ist in dieser
Hinsicht besser, wenn das zu sortierende Feld anfangs bereits sortiert
ist? Begründen Sie Ihre Antwort.
\index{Algorithmische Komplexität (O-Notation)}

\begin{bAntwort}
Der Bubblesort-Algorithmus hat im \emph{best case} eine Laufzeit von
$\mathcal{O}(n)$, der Selectionsort-Algorithmus $\mathcal{O}(n^2)$.

Bubblesort steuert seine äußere bedingte Wiederholung in vielen
Implementationen über eine boolsche Hilfvariable \bJavaCode{getauscht},
die beim Betreten der Schleife erstmals auf falsch gesetzt wird. Erst
wenn Vertauschungen vergenommen werden müssen, wird diese Varialbe auf
wahr gesetzt und die äußere Schleife läuft ein weiteres Mal ab. Ist das
zu sortierende Feld bereits sortiert, durchsucht der Algorithmus des
Bubblesort das Feld einmal und terminiert dann.

Der Selectionsort-Algorithmus hingegen ist mit zwei ineinander
verschränkten Schleifen umgesetzt, deren Wiederholungsanzahl sich starr
nach der Anzahl der Elemente im Feld richtet.

\bPseudoUeberschrift{Bubblesort}

\bJavaDatei[firstline=15,lastline=27]{sortier/BubbleIterativ}

\bPseudoUeberschrift{Selectionsort}

\bJavaDatei[firstline=12,lastline=30]{sortier/SelectionRechtsIterativ}
\end{bAntwort}

\end{enumerate}
\end{document}
