Skip to content
Snippets Groups Projects
Select Git revision
  • f42af9fa3518dad211b25cde6b6937111546980e
  • master default protected
  • 2018ws
  • 2017ws
  • 2016ws
5 results

objects-3a.c

Blame
  • Forked from Peter Gerwinski / hp
    Source project has a limited visibility.
    sort-3.c 1011 B
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    
    int comparisons = 0;
    
    void display (char **name, int left, int right)
    {
      printf ("\e[H\e[J");
      for (int i = 0; name[i]; i++)
        {
          printf ("%s", name[i]);
          if (i == left || i == right)
            printf (" <--");
          printf ("\n");
        }
      printf ("%d\n", comparisons);
    }
    
    int compare (char **name, int left, int right)
    {
      int result = strcmp (name[left], name[right]);
      comparisons++;
      display (name, left, right);
      usleep (200000);
      return result;
    }
    
    int find_first (char **name, int i0)
    {
      int first = i0;
      for (int i = i0 + 1; name[i]; i++)
        if (compare (name, i, first) < 0)
          first = 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 };
      int first = find_first (name, 0);
      display (name, first, -1);
      return 0;
    }