/*
 * compile with command:
 * $ gcc selection_sort.c ../hdr.c
 */

#include <stdio.h>
#include <stdlib.h>
#include "../hdr.h"         // definiton of NELEMS and print_array() and swap()
                            // all implemented in ../hdr.c

void selection_sort(int numbers[], int n);

int
main(int argc, char *argv[])
{
    int numbers[] = {50, 12, 4, -9, 78, 15, 17, 84, 52};
    int n;

    n = NELEMS(numbers);
    print_array(numbers, n);
    selection_sort(numbers, n);
    print_array(numbers, n);

    exit(0);
}

void
selection_sort(int numbers[], int n)
{
    int i;          /* find i'th greater number */
    int j;          /* index for traversing unsorted sub-array */
    int max_index;  /* hold index of maximum number in unsorted sub-array */

    for (i = n-1; i > 0; i--) {
        max_index = i;                          // suppose that number existed
                                                // in numbers[i] is maximum

        for (j = 0; j < i; j++)
            if (numbers[j] > numbers[max_index])
                max_index = j;

        if (max_index != i)
            swap(numbers, i, max_index);
    }
}
