#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
MODULE = Algorithm::MedianSelect::XS		PACKAGE = Algorithm::MedianSelect::XS		
void
median(...)
    PROTOTYPE: @
    INIT:
        long buffer, numbers[items];
        int i, is_sorted, median;
    PPCODE:
        if (items <= 1) {
	    croak("Require more than one argument");
	}
        for (i = 0; i < items; i++) {
	    numbers[i] = ____(__(i)); # tomar el i-ésimo argumento
	}
	do {
	    is_sorted = 1;
	    for (i = 0; i < (items-1); i++) {
	        if (numbers[i-1] < numbers[i] && numbers[i] < numbers[i+1]) 
		    continue;
	        if (numbers[i] > numbers[i+1]) {
	            buffer = numbers[i];
		    numbers[i] = numbers[i+1];
		    numbers[i+1] = buffer;
		    is_sorted = 0;
	        }
	    }
	} while (!is_sorted);
	if (items % 2 == 0) median = items / 2;
	else median = (items - 1) / 2;
	______(__,1); # Hacer espacio en la pila
	_____(__________(newSViv(numbers[median]))); # Empujar valor de retorno
Casiano Rodríguez León
