
#include <stdio.h>

#define ARRAYLEN 10

void selectionSort(int * a, const int len);

// allgemeine Array-Werkzeuge
void copyArray(int * source, int * dest, const int len);
void printArray(const int * a, const int len);
void swap(int * a, int * b);

void selectionSort(int * a, const int len)
{
  int i, k, min;
  for (i=0; i < len; ++i)
  {
    min=i;
    for (k=i+1; k < len; ++k)
    {
      if(a[k] < a[min]) min = k;
    }
    swap(&a[i], &a[min]);
  }
}

void copyArray(int * source, int * dest, const int len)
{
  int i;
  for (i=0; i<len; ++i)
  {
    dest[i] = source[i];
  }
}

void printArray(const int * a, const int len)
{
  int i;
  for (i=0; i<len; ++i)
  {
    printf(" %d", a[i]);
  }
  printf("\n");
}

void swap(int * a, int * b)
{
  if (a==b) return;
  *a ^= *b;
  *b ^= *a;
  *a ^= *b;
}

int main(void) {
  int unordnung[ARRAYLEN] = { 4, 7, 2, 5, 1, 9, 3, 8, 6, 0 };

  printArray(unordnung, ARRAYLEN);
  selectionSort(unordnung, ARRAYLEN);
  printArray(unordnung, ARRAYLEN);

  return 0;
}

