diff --git a/20151210/ainf-20151210.pdf b/20151210/ainf-20151210.pdf
index 8184b16afdc756211b714c44ae7c687875d00953..8cec9514dc6be76744accd4a38f15951b91fd40c 100644
Binary files a/20151210/ainf-20151210.pdf and b/20151210/ainf-20151210.pdf differ
diff --git a/20151210/ainf-20151210.tex b/20151210/ainf-20151210.tex
index 294a15c9b3601904221d3462ad91e3a4f00410af..8c41d30714b9e12b3411229a7280b3c06edea3b9 100644
--- a/20151210/ainf-20151210.tex
+++ b/20151210/ainf-20151210.tex
@@ -1,4 +1,4 @@
-% ainf-20151203.pdf - Lecture Slides on Applied Computer Sciences
+% ainf-20151210.pdf - Lecture Slides on Applied Computer Sciences
 % Copyright (C) 2012, 2013, 2015  Peter Gerwinski
 %
 % This document is free software: you can redistribute it and/or
@@ -43,7 +43,7 @@
 
 \title{Angewandte Informatik}
 \author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
-\date{3.\ Dezember 2015}
+\date{10.\ Dezember 2015}
 
 \begin{document}
 
@@ -336,41 +336,69 @@
   \showsubsection
 
   In Output-Port schreiben = Leitungen ansteuern
-
-  \medskip
-
-  Datei: \file{RP6Base/RP6Base\_Examples/RP6Examples\_20080915/\\
-  RP6Lib/RP6base/RP6RobotBaseLib.c}
-
-  Suchbegriff: \lstinline{setMotorDir}
-
-  \medskip
-
-  \begin{lstlisting}
-    void setMotorDir(uint8_t left_dir, uint8_t right_dir)
-    {
-      /* ... */
-      if(left_dir)
-        PORTC |= DIR_L;
-      else
-        PORTC &= ~DIR_L;
-      if(right_dir)
-        PORTC |= DIR_R;
-      else
-        PORTC &= ~DIR_R;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(2.2,0.50){\vector(-2,1){0.5}}
-    \put(2.25,0.40){\makebox(0,0)[l]{Output-Port}}
-    \put(4.7,3.0){\vector(-2,1){0.75}}
-    \put(4.7,3.0){\vector(-2,-1){0.75}}
-    \put(4.8,3.0){\makebox(0,0)[l]{Manipulation einzelner Bits}}
-  \end{picture}
-
-  \vspace*{-1.5cm}
-  \strut\hfill\textarrow\ Steuerung der Motordrehrichtung
+  \begin{tabbing}
+    Datei: \= \file{RP6Base/RP6Base\_Examples/RP6Examples\_20080915/}\\
+           \> \file{RP6Lib/RP6base/RP6RobotBaseLib.c}
+  \end{tabbing}
+  \begin{onlyenv}<1>
+    Suchbegriff: \lstinline{setMotorDir}
+
+    \medskip
+
+    \begin{lstlisting}[gobble=6]
+      void setMotorDir(uint8_t left_dir, uint8_t right_dir)
+      {
+        /* ... */
+        if(left_dir)
+          PORTC |= DIR_L;
+        else
+          PORTC &= ~DIR_L;
+        if(right_dir)
+          PORTC |= DIR_R;
+        else
+          PORTC &= ~DIR_R;
+      }
+    \end{lstlisting}
+    \begin{picture}(0,0)
+      \color{red}
+      \put(2.2,0.50){\vector(-2,1){0.5}}
+      \put(2.25,0.40){\makebox(0,0)[l]{Output-Port}}
+      \put(4.7,3.0){\vector(-2,1){0.75}}
+      \put(4.7,3.0){\vector(-2,-1){0.75}}
+      \put(4.8,3.0){\makebox(0,0)[l]{Manipulation einzelner Bits}}
+    \end{picture}
+
+    \vspace*{-1.5cm}
+    \strut\hfill\textarrow\ Steuerung der Motordrehrichtung
+  \end{onlyenv}
+  \begin{onlyenv}<2>
+    Suchbegriff: \lstinline{updateStatusLEDs}
+
+    \medskip
+
+    \begin{lstlisting}[gobble=6]
+      DDRB &= ~0x83;
+      PORTB &= ~0x83;
+      if(statusLEDs.LED4){ DDRB |= SL4; PORTB |= SL4; }
+      if(statusLEDs.LED5){ DDRB |= SL5; PORTB |= SL5; }
+      if(statusLEDs.LED6){ DDRB |= SL6; PORTB |= SL6; }
+      DDRC &= ~0x70;
+      PORTC &= ~0x70;
+      DDRC |= ((statusLEDs.byte << 4) & 0x70);
+      PORTC |= ((statusLEDs.byte << 4) & 0x70);
+    \end{lstlisting}
+    \begin{picture}(0,0)
+      \color{red}
+      \put(3.7,3.9){\vector(-1,0){0.5}}
+      \put(3.75,3.9){\makebox(0,0)[l]{Data Direction Register: auf Input(!) setzen}}
+      \put(3.7,3.5){\vector(-1,0){0.5}}
+      \put(3.75,3.5){\makebox(0,0)[l]{internen Pull-Up-Widerstand ausschalten}}
+      \put(8.7,2.7){\makebox(0,0)[l]{\shortstack{Manipulation\\einzelner Bits}}}
+      \put(7.2,1.0){\makebox(0,0)[l]{\shortstack{3 Bits\\gemeinsam}}}
+    \end{picture}
+
+    \lstinline{union statusLEDs}: Bit-Felder vs.\ Byte
+  \end{onlyenv}
 
 \end{frame}
 
@@ -407,7 +435,7 @@
     \put(2.0,4.4){\makebox(0,0)[l]{"`Dies ist ein Interrupt-Handler."'}}
     \put(2.3,3.6){\vector(-1,-1){0.7}}
     \put(2.4,3.6){\makebox(0,0)[l]{Interrupt-Vektor 0 darauf zeigen lassen}}
-    \put(3.7,2.9){\makebox(0,0)[l]{Schreibweise herstellerspezifisch!}}
+    \put(3.7,2.9){\makebox(0,0)[l]{Schreibweise abhängig von Prozessor und Compiler!}}
   \end{picture}
 
   \vspace*{-1.5cm}
diff --git a/20151210/sort-0.c b/20151210/sort-0.c
new file mode 100644
index 0000000000000000000000000000000000000000..43814eb3ff763bb05e82cde70014d7a02ad4727a
--- /dev/null
+++ b/20151210/sort-0.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+
+char *find_first (char **name)
+{
+  return "Anna";
+}
+
+int main (void)
+{
+  char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                   "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                   "Thomas", "Ulrich", "Zacharias", NULL };
+  char *first = find_first (name);
+  printf ("%s\n", first);
+  return 0;
+}
diff --git a/20151210/sort-1.c b/20151210/sort-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..75d22da4f7c1fc8c05348bb5330f2baf5aa51ada
--- /dev/null
+++ b/20151210/sort-1.c
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <string.h>
+
+char *find_first (char **name)
+{
+  if (name == NULL || name[0] == NULL)
+    return NULL;
+  char *first = name[0];
+  int i = 1;
+  while (name[i])
+    {
+      if (strcmp (name[i], first) < 0)
+        first = name[i];
+      i++;
+    }
+  return first;
+}
+
+int main (void)
+{
+  char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                   "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                   "Thomas", "Ulrich", "Zacharias", NULL };
+  char *first = find_first (name);
+  printf ("%s\n", first);
+  return 0;
+}
diff --git a/20151210/sort-10.c b/20151210/sort-10.c
new file mode 100644
index 0000000000000000000000000000000000000000..bb00db23b46272d24a0fc384fbf05a8970f6bda9
--- /dev/null
+++ b/20151210/sort-10.c
@@ -0,0 +1,63 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+int comp_counter = 0;
+
+void clear_screen (void)
+{
+  printf ("\e[H\e[J");
+}
+
+void output_marked (char **name, int mark1, int mark2)
+{
+  clear_screen ();
+  for (int i = 0; name[i]; i++)
+    if (i == mark1 || i == mark2)
+      printf ("%s <--\n", name[i]);
+    else
+      printf ("%s\n", name[i]);
+  printf ("%d\n", comp_counter);
+}
+
+void output (char **name)
+{
+  output_marked (name, -1, -1);
+}
+
+int compare (char **name, int left, int right)
+{
+  comp_counter++;
+  output_marked (name, left, right);
+  usleep (100000);
+  return strcmp (name[left], name[right]);
+}
+
+void sort (char **name, int size)
+{
+  int sorted = 0;
+  int n = size;
+  while (n > 1 && !sorted)
+    {
+      sorted = 1;
+      for (int i = 0; i < n - 1; i++)
+        if (compare (name, i, i + 1) > 0)
+          {
+            sorted = 0;
+            char *temp = name[i];
+            name[i] = name[i + 1];
+            name[i + 1] = temp;
+          }
+      n--;
+    }
+}
+
+int main (void)
+{
+  char *names[] = { "Anna", "Berta", "Box", "Dieter", "Fritz", "Hans",
+                    "Heinrich", "Hugo", "Lisa", "Maria", "Otto", "Peter",
+                    "Siegfried", "Thomas", "Ulrich", "Zacharias", NULL };
+  sort (names, 16);
+  output (names);
+  return 0;
+}
diff --git a/20151210/sort-11.c b/20151210/sort-11.c
new file mode 100644
index 0000000000000000000000000000000000000000..eb8236cb8d655a484a347637f9b024a3e4ff6daa
--- /dev/null
+++ b/20151210/sort-11.c
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+int comp_counter = 0;
+
+void clear_screen (void)
+{
+  printf ("\e[H\e[J");
+}
+
+void output_marked (char **name, int mark1, int mark2)
+{
+  clear_screen ();
+  for (int i = 0; name[i]; i++)
+    if (i == mark1 || i == mark2)
+      printf ("%s <--\n", name[i]);
+    else
+      printf ("%s\n", name[i]);
+  printf ("%d\n", comp_counter);
+}
+
+void output (char **name)
+{
+  output_marked (name, -1, -1);
+}
+
+int compare (char **name, int left, int right)
+{
+  comp_counter++;
+  output_marked (name, left, right);
+  usleep (100000);
+  return strcmp (name[left], name[right]);
+}
+
+void sort (char **name, int size)  /* BubbleSort */
+{                                  /* Wikipedia: bubblesort3 */
+  int sorted = 0;
+  int n = size;
+  while (n > 1 && !sorted)
+    {
+      int newn = 1;
+      sorted = 1;
+      for (int i = 0; i < n - 1; i++)
+        if (compare (name, i, i + 1) > 0)
+          {
+            sorted = 0;
+            char *temp = name[i];
+            name[i] = name[i + 1];
+            name[i + 1] = temp;
+            newn = i + 1;
+          }
+      n = newn;
+    }
+}
+
+int main (void)
+{
+  char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                    "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                    "Thomas", "Ulrich", "Zacharias", NULL };
+  sort (names, 16);
+  output (names);
+  return 0;
+}
diff --git a/20151210/sort-12.c b/20151210/sort-12.c
new file mode 100644
index 0000000000000000000000000000000000000000..428d4fab9614277cbef8362f1cbc0f9e557387dd
--- /dev/null
+++ b/20151210/sort-12.c
@@ -0,0 +1,62 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+int comp_counter = 0;
+
+void clear_screen (void)
+{
+  printf ("\e[H\e[J");
+}
+
+void output_marked (char **name, int mark1, int mark2)
+{
+  clear_screen ();
+  for (int i = 0; name[i]; i++)
+    if (i == mark1 || i == mark2)
+      printf ("%s <--\n", name[i]);
+    else
+      printf ("%s\n", name[i]);
+  printf ("%d\n", comp_counter);
+}
+
+void output (char **name)
+{
+  output_marked (name, -1, -1);
+}
+
+int compare (char **name, int left, int right)
+{
+  comp_counter++;
+  output_marked (name, left, right);
+  usleep (100000);
+  return strcmp (name[left], name[right]);
+}
+
+void sort (char **name, int size)  /* BubbleSort */
+{                                  /* Wikipedia: bubblesort3 */
+  int n = size;
+  while (n > 1)
+    {
+      int newn = 1;
+      for (int i = 0; i < n - 1; i++)
+        if (compare (name, i, i + 1) > 0)
+          {
+            char *temp = name[i];
+            name[i] = name[i + 1];
+            name[i + 1] = temp;
+            newn = i + 1;
+          }
+      n = newn;
+    }
+}
+
+int main (void)
+{
+  char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                    "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                    "Thomas", "Ulrich", "Zacharias", NULL };
+  sort (names, 16);
+  output (names);
+  return 0;
+}
diff --git a/20151210/sort-13.c b/20151210/sort-13.c
new file mode 100644
index 0000000000000000000000000000000000000000..5daf8054d1d5255fb2b48d0f6d3784b0dd74d602
--- /dev/null
+++ b/20151210/sort-13.c
@@ -0,0 +1,72 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+int comp_counter = 0;
+
+void clear_screen (void)
+{
+  printf ("\e[H\e[J");
+}
+
+void output_marked (char **name, int mark)
+{
+  clear_screen ();
+  for (int i = 0; name[i]; i++)
+    if (i == mark)
+      printf ("%s <--\n", name[i]);
+    else
+      printf ("%s\n", name[i]);
+  printf ("%d\n", comp_counter);
+}
+
+void output (char **name)
+{
+  output_marked (name, -1);
+}
+
+int compare (char **name, int left, char *right)
+{
+  comp_counter++;
+  output_marked (name, left);
+  usleep (100000);
+  return strcmp (name[left], right);
+}
+
+void sort (char **name, int left, int right)  /* QuickSort */
+{
+  if (left < right)
+    {
+      int middle = (left + right) / 2;
+      char *test = name[middle];
+      int l = left;
+      int r = right;
+      while (l <= r)
+        {
+          while (compare (name, l, test) < 0)
+            l++;
+          while (compare (name, r, test) > 0)
+            r--;
+          if (l <= r)
+            {
+              char *temp = name[l];
+              name[l] = name[r];
+              name[r] = temp;
+              l++;
+              r--;
+            }
+        }
+      sort (name, left, r);
+      sort (name, l, right);
+    }
+}
+
+int main (void)
+{
+  char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                    "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                    "Thomas", "Ulrich", "Zacharias", NULL };
+  sort (names, 0, 15);
+  output (names);
+  return 0;
+}
diff --git a/20151210/sort-14.c b/20151210/sort-14.c
new file mode 100644
index 0000000000000000000000000000000000000000..c3046ab8d1ffcf08f770a781f750af0b12f25f73
--- /dev/null
+++ b/20151210/sort-14.c
@@ -0,0 +1,74 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+int comp_counter = 0;
+
+void clear_screen (void)
+{
+  printf ("\e[H\e[J");
+}
+
+void output_marked (char **name, int mark)
+{
+  clear_screen ();
+  for (int i = 0; name[i]; i++)
+    if (i == mark)
+      printf ("%s <--\n", name[i]);
+    else
+      printf ("%s\n", name[i]);
+  printf ("%d\n", comp_counter);
+}
+
+void output (char **name)
+{
+  output_marked (name, -1);
+}
+
+int compare (char **name, int left, char *right)
+{
+  comp_counter++;
+  output_marked (name, left);
+  usleep (100000);
+  return strcmp (name[left], right);
+}
+
+void sort (char **name, int left, int right)  /* QuickSort */
+{
+  if (left < right)
+    {
+      int middle = left + rand () % (right - left + 1);
+      char *test = name[middle];
+      int l = left;
+      int r = right;
+      while (l <= r)
+        {
+          while (compare (name, l, test) < 0)
+            l++;
+          while (compare (name, r, test) > 0)
+            r--;
+          if (l <= r)
+            {
+              char *temp = name[l];
+              name[l] = name[r];
+              name[r] = temp;
+              l++;
+              r--;
+            }
+        }
+      sort (name, left, r);
+      sort (name, l, right);
+    }
+}
+
+int main (void)
+{
+  char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                    "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                    "Thomas", "Ulrich", "Zacharias", NULL };
+  srand (137);
+  sort (names, 0, 15);
+  output (names);
+  return 0;
+}
diff --git a/20151210/sort-2.c b/20151210/sort-2.c
new file mode 100644
index 0000000000000000000000000000000000000000..1b4dd9e544bcb9c39c8e2cc3bccfba79073132ed
--- /dev/null
+++ b/20151210/sort-2.c
@@ -0,0 +1,32 @@
+#include <stdio.h>
+#include <string.h>
+
+int find_first (char **name)
+{
+  if (name == NULL || name[0] == NULL)
+    return -1;
+  int first_pos = 0;
+  char *first = name[0];
+  int i = 1;
+  while (name[i])
+    {
+      if (strcmp (name[i], first) < 0)
+        {
+          first_pos = i;
+          first = name[i];
+        }
+      i++;
+    }
+  return first_pos;
+}
+
+int main (void)
+{
+  char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                   "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                   "Thomas", "Ulrich", "Zacharias", NULL };
+  int first = find_first (name);
+  if (first >= 0)
+    printf ("%s\n", name[first]);
+  return 0;
+}
diff --git a/20151210/sort-3.c b/20151210/sort-3.c
new file mode 100644
index 0000000000000000000000000000000000000000..5b74a9139af986fdfa010c59e5de76c326a9d8b1
--- /dev/null
+++ b/20151210/sort-3.c
@@ -0,0 +1,39 @@
+#include <stdio.h>
+#include <string.h>
+
+int find_first (char **name)
+{
+  if (name == NULL || name[0] == NULL)
+    return -1;
+  int first_pos = 0;
+  char *first = name[0];
+  int i = 1;
+  while (name[i])
+    {
+      if (strcmp (name[i], first) < 0)
+        {
+          first_pos = i;
+          first = name[i];
+        }
+      i++;
+    }
+  return first_pos;
+}
+
+int main (void)
+{
+  char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                   "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                   "Thomas", "Ulrich", "Zacharias", NULL };
+  int first = find_first (name);
+  if (first >= 0)
+    {
+      printf ("%s\n", name[first]);
+      char *temp = name[0];
+      name[0] = name[first];
+      name[first] = temp;
+      first = find_first (name + 1);
+      printf ("%s\n", name[1 + first]);
+    }
+  return 0;
+}
diff --git a/20151210/sort-4.c b/20151210/sort-4.c
new file mode 100644
index 0000000000000000000000000000000000000000..0d7c1c160ebdac2b67a0bcf656a13ed722836bb1
--- /dev/null
+++ b/20151210/sort-4.c
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <string.h>
+
+int find_first (char **name)
+{
+  if (name == NULL || name[0] == NULL)
+    return -1;
+  int first_pos = 0;
+  char *first = name[0];
+  int i = 1;
+  while (name[i])
+    {
+      if (strcmp (name[i], first) < 0)
+        {
+          first_pos = i;
+          first = name[i];
+        }
+      i++;
+    }
+  return first_pos;
+}
+
+int main (void)
+{
+  char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                   "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                   "Thomas", "Ulrich", "Zacharias", NULL };
+  int i = 0;
+  int first = find_first (name + i);
+  while (first >= 0)
+    {
+      printf ("%s\n", name[first + i]);
+      char *temp = name[0 + i];
+      name[0 + i] = name[first + i];
+      name[first + i] = temp;
+      i++;
+      first = find_first (name + i);
+    }
+  return 0;
+}
diff --git a/20151210/sort-5.c b/20151210/sort-5.c
new file mode 100644
index 0000000000000000000000000000000000000000..7bab242a32aa3c5c351f4f0866ac784340ca79ee
--- /dev/null
+++ b/20151210/sort-5.c
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <string.h>
+
+int find_first (char **name, int start_index)
+{
+  if (name == NULL || name[start_index] == NULL)
+    return -1;
+  int first_pos = start_index;
+  char *first = name[start_index];
+  int i = start_index + 1;
+  while (name[i])
+    {
+      if (strcmp (name[i], first) < 0)
+        {
+          first_pos = i;
+          first = name[i];
+        }
+      i++;
+    }
+  return first_pos;
+}
+
+int main (void)
+{
+  char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                   "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                   "Thomas", "Ulrich", "Zacharias", NULL };
+  int start = 0;
+  int first = find_first (name, start);
+  while (first >= 0)
+    {
+      printf ("%s\n", name[first]);
+      char *temp = name[start];
+      name[start] = name[first];
+      name[first] = temp;
+      start++;
+      first = find_first (name, start);
+    }
+  return 0;
+}
diff --git a/20151210/sort-6.c b/20151210/sort-6.c
new file mode 100644
index 0000000000000000000000000000000000000000..83e780006ad9d9eb156a255a86846dc618474930
--- /dev/null
+++ b/20151210/sort-6.c
@@ -0,0 +1,46 @@
+#include <stdio.h>
+#include <string.h>
+
+int find_first (char **name, int start_index)
+{
+  if (name == NULL || name[start_index] == NULL)
+    return -1;
+  int first_pos = start_index;
+  char *first = name[start_index];
+  int i = start_index + 1;
+  while (name[i])
+    {
+      if (strcmp (name[i], first) < 0)
+        {
+          first_pos = i;
+          first = name[i];
+        }
+      i++;
+    }
+  return first_pos;
+}
+
+void sort (char **name)
+{
+  int start = 0;
+  int first = find_first (name, start);
+  while (first >= 0)
+    {
+      char *temp = name[start];
+      name[start] = name[first];
+      name[first] = temp;
+      start++;
+      first = find_first (name, start);
+    }
+}
+
+int main (void)
+{
+  char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                   "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                   "Thomas", "Ulrich", "Zacharias", NULL };
+  sort (name);
+  for (int i = 0; name[i]; i++)
+    printf ("%s\n", name[i]);
+  return 0;
+}
diff --git a/20151210/sort-7.c b/20151210/sort-7.c
new file mode 100644
index 0000000000000000000000000000000000000000..7af587c5cf492e8dcb3b9e18ea1f456c42df2041
--- /dev/null
+++ b/20151210/sort-7.c
@@ -0,0 +1,70 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+int comp_counter = 0;
+
+void clear_screen (void)
+{
+  printf ("\e[H\e[J");
+}
+
+void output_marked (char **name, int mark1, int mark2)
+{
+  clear_screen ();
+  for (int i = 0; name[i]; i++)
+    if (i == mark1 || i == mark2)
+      printf ("%s <--\n", name[i]);
+    else
+      printf ("%s\n", name[i]);
+  printf ("%d\n", comp_counter);
+}
+
+void output (char **name)
+{
+  output_marked (name, -1, -1);
+}
+
+int compare (char **name, int left, int right)
+{
+  comp_counter++;
+  output_marked (name, left, right);
+  usleep (200000);
+  return strcmp (name[left], name[right]);
+}
+
+int find_first (char **name, int first_pos)
+{
+  if (name == NULL || name[first_pos] == NULL)
+    return -1;
+  int i = first_pos + 1;
+  while (name[i])
+    {
+      if (compare (name, i, first_pos) < 0)
+        first_pos = i;
+      i++;
+    }
+  return first_pos;
+}
+
+void sort (char **name)
+{
+  if (name)
+    for (int i = 0; name[i] != NULL; i++)
+      {
+        int first = find_first (name, i);
+        char *temp = name[i];
+        name[i] = name[first];
+        name[first] = temp;
+      }
+}
+
+int main (void)
+{
+  char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                    "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                    "Thomas", "Ulrich", "Zacharias", NULL };
+  sort (names);
+  output (names);
+  return 0;
+}
diff --git a/20151210/sort-8.c b/20151210/sort-8.c
new file mode 100644
index 0000000000000000000000000000000000000000..30f7647683fec6c315f56be5c2d1660ee06df11d
--- /dev/null
+++ b/20151210/sort-8.c
@@ -0,0 +1,56 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+int comp_counter = 0;
+
+void clear_screen (void)
+{
+  printf ("\e[H\e[J");
+}
+
+void output_marked (char **name, int mark1, int mark2)
+{
+  clear_screen ();
+  for (int i = 0; name[i]; i++)
+    if (i == mark1 || i == mark2)
+      printf ("%s <--\n", name[i]);
+    else
+      printf ("%s\n", name[i]);
+  printf ("%d\n", comp_counter);
+}
+
+void output (char **name)
+{
+  output_marked (name, -1, -1);
+}
+
+int compare (char **name, int left, int right)
+{
+  comp_counter++;
+  output_marked (name, left, right);
+  usleep (100000);
+  return strcmp (name[left], name[right]);
+}
+
+void sort (char **name, int size)  /* Wikipedia: bubblesort1 */
+{
+  for (int n = size; n > 1; n--)
+    for (int i = 0; i < n - 1; i++)
+      if (compare (name, i, i + 1) > 0)
+        {
+          char *temp = name[i];
+          name[i] = name[i + 1];
+          name[i + 1] = temp;
+        }
+}
+
+int main (void)
+{
+  char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                    "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                    "Thomas", "Ulrich", "Zacharias", NULL };
+  sort (names, 16);
+  output (names);
+  return 0;
+}
diff --git a/20151210/sort-9.c b/20151210/sort-9.c
new file mode 100644
index 0000000000000000000000000000000000000000..3fd3f44073787223a21e5f8d6e78bbd116dd5036
--- /dev/null
+++ b/20151210/sort-9.c
@@ -0,0 +1,63 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+int comp_counter = 0;
+
+void clear_screen (void)
+{
+  printf ("\e[H\e[J");
+}
+
+void output_marked (char **name, int mark1, int mark2)
+{
+  clear_screen ();
+  for (int i = 0; name[i]; i++)
+    if (i == mark1 || i == mark2)
+      printf ("%s <--\n", name[i]);
+    else
+      printf ("%s\n", name[i]);
+  printf ("%d\n", comp_counter);
+}
+
+void output (char **name)
+{
+  output_marked (name, -1, -1);
+}
+
+int compare (char **name, int left, int right)
+{
+  comp_counter++;
+  output_marked (name, left, right);
+  usleep (100000);
+  return strcmp (name[left], name[right]);
+}
+
+void sort (char **name, int size)  /* Wikipedia: bubblesort2 */
+{
+  int sorted = 0;
+  int n = size;
+  while (n > 1 && !sorted)
+    {
+      sorted = 1;
+      for (int i = 0; i < n - 1; i++)
+        if (compare (name, i, i + 1) > 0)
+          {
+            sorted = 0;
+            char *temp = name[i];
+            name[i] = name[i + 1];
+            name[i + 1] = temp;
+          }
+      n--;
+    }
+}
+
+int main (void)
+{
+  char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
+                    "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
+                    "Thomas", "Ulrich", "Zacharias", NULL };
+  sort (names, 16);
+  output (names);
+  return 0;
+}