\documentclass{bschlangaul-aufgabe}
\bLadePakete{java,grafik}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 7},
  Thematik = {Sortieren duch Einfügen},
  Referenz = 46115-2017-H.T2-A7,
  RelativerPfad = Examen/46115/2017/09/Thema-2/Aufgabe-7.tex,
  ZitatSchluessel = examen:46115:2017:09,
  ZitatBeschreibung = {Thema 2 Aufgabe 7},
  BearbeitungsStand = unbekannt,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Insertionsort, Schreibtischlauf (Sortierung), Implementierung in Java},
  EinzelpruefungsNr = 46115,
  Jahr = 2017,
  Monat = 09,
  ThemaNr = 2,
  AufgabeNr = 7,
}

\def\TmpSchreibtischLauf#1#2#3#4#5#6#7{
  \noindent
  \begin{tikzpicture}
  \node (qs) [unsorted] {
  \nodepart{one} #1
  \nodepart{two} #2
  \nodepart{three} #3
  \nodepart{four} #4
  \nodepart{five} #5
  \nodepart{six} #6
  };

  \node[sorted, fit=(qs.north west) (qs.south west) (qs.#7 split)] {};
  \end{tikzpicture}
}

\section{Aufgabe 7
\index{Insertionsort}
\footcite[Thema 2 Aufgabe 7]{examen:46115:2017:09}
}

\begin{enumerate}
\item Führen Sie \emph{„Sortieren durch Einfügen“} lexikographisch
aufsteigend und \emph{in-situ} (\emph{in-place}) so in einem
Schreibtischlauf auf folgendem Feld (Array) aus, dass gleiche Elemente
ihre relative Abfolge jederzeit beibehalten (also dass \zB $A_1$
stets vor $A_2$ im Feld steht). Jede Zeile stellt den Zustand des Feldes
dar, nachdem das jeweils nächste Element in die Endposition verschoben
wurde. Der bereits sortierte Teilbereich steht vor |||. Gleiche Elemente
tragen zwecks Unterscheidung ihre \emph{„Objektidentität“} als Index
(\zB \bJavaCode{"A1".equals("A2")} aber \bJavaCode{"A1" != "A2"})
\footcite[Seite 1, Aufgabe 1]{aud:pu:2}
\index{Schreibtischlauf (Sortierung)}

\usetikzlibrary{chains,fit,shapes,shapes.multipart}
\tikzset{
  sorted/.style = {
    draw,
    line width=0.6pt,
    inner sep=0mm
  },
  unsorted/.style = {
    draw,
    font=\tiny,
    rectangle split,
    rectangle split horizontal,
    rectangle split parts=6,
    text centered,
    align=center
  },
}

\begin{center}
\TmpSchreibtischLauf{$L$}{$A_1$}{$B_1$}{$F$}{$A_2$}{$B_2$}{one}
\end{center}

\begin{bAntwort}
\begin{center}
\TmpSchreibtischLauf{$L$}{$A_1$}{$B_1$}{$F$}{$A_2$}{$B_2$}{one}

\TmpSchreibtischLauf{$A_1$}{$L$}{$B_1$}{$F$}{$A_2$}{$B_2$}{two}

\TmpSchreibtischLauf{$A_1$}{$B_1$}{$L$}{$F$}{$A_2$}{$B_2$}{three}

\TmpSchreibtischLauf{$A_1$}{$B_1$}{$F$}{$L$}{$A_2$}{$B_2$}{four}

\TmpSchreibtischLauf{$A_1$}{$A_2$}{$B_1$}{$F$}{$L$}{$B_2$}{five}

\begin{tikzpicture}
\node (qs) [unsorted] {
\nodepart{one} $A_1$
\nodepart{two} $A_2$
\nodepart{three} $B_1$
\nodepart{four} $B_2$
\nodepart{five} $F$
\nodepart{six} $L$
};

\node[sorted, fit=(qs.north west) (qs.south west) (qs.south east)] {};
\end{tikzpicture}
\end{center}
\end{bAntwort}

\item Ergänzen Sie die folgende Methode\index{Implementierung in Java}
so, dass sie die Zeichenketten im Feld \bJavaCode{a} lexikographisch
aufsteigend durch Einfügen sortiert. Sie muss zum vorangehenden Ablauf
passen, \dh sie muss \emph{iterativ} sowie \emph{in-situ}
(\emph{in-place}) arbeiten und die relative Reihenfolge gleicher
Elemente jederzeit beibehalten. Sie dürfen davon ausgehen, dass kein
Eintrag im Feld null ist.
\index{Implementierung in Java}

\begin{minted}{java}
void sortierenDurchEinfuegen(String[] a) {
  // Hilfsvariable:
  String tmp;
}
\end{minted}

\begin{bAntwort}
\bJavaExamen[firstline=5,lastline=16]{46115}{2017}{09}{InsertionSort}
\end{bAntwort}
\end{enumerate}
\end{document}
