// Version 5

// using suitable abstraction of operation

#include <stdio.h>

void swap(int *, int *);
void printArrayContents(int [], int);

void main()
{
    int data[] = {12, 3, 37, 8, 24, 15, 5, 33};
    int ndata = sizeof(data) / sizeof(int);
    int i, j;
    int min;

    for (i=0; i<ndata; i++)
    {
        min = i;
        for (j=i+1; j<ndata; j++)
        {
            if (data[j]<data[min]) min = j;
        }
        swap(&data[i], &data[min]);
    }
    
    printArrayContents(data, ndata);
}

void swap(int *x, int *y)
{
    int tmp;
    tmp = *x;
    *x = *y;
    *y = tmp;
}

void printArrayContents(int data[], int ndata)
{
    int i;
    printf("Sorted data:\n");
    for (i=0; i<ndata; i++)
        printf(" %d", data[i]);
    printf("\n");
}