/*
Tutto il codice di seguito è stato scritto ed ideato da
Lorenzo La Porta, ridistribuzione, copiatura e modificazione
del codice devono essere effettuati con l'assenso dell'autore
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 8
void swap(int *p, int *pp)
{
int q=*p;
*p=*pp;
*pp=q;
}
void ord(int *vet, int beg, int end)//Versione ricorsiva originale
{ //Non del tutto funzionante
if(beg>=end)return;//semplici asserzioni che verificano che la fine non sia dopo l'inizio
//o che comunque fermano il tutto quando si sà di essere arrivati alla
//fine, ciò quando si ha ridotto a 1 o 0 il vettore
int max=beg,//continene l'indirizzo del numero massimo del vettore
min=end,//contiene l'indirizzo del numero minimo del vettore
i=beg;//per ciclare il vettore
for(;i<end;i++)//fino alla fine
if(vet[i]>vet[max])max=i;//se il numero è maggiore di vet[max] allora cambia max
else if(vet[i]<vet[min])min=i;//se il numero è minore di vet[min] allora cambia min
swap(&vet[min],&vet[beg]);//scambia l'elemento minimo con l'elemento 'iniziale
if(max==beg)max=min;//se non lo ho già fatto allora scambio elemento massimo e elemento iniziale
swap(&vet[max],&vet[end]);//scambio
ord(vet,beg+1,end-1);//faccio lo stesso con gli elementi inferiori
}
int main(int argc, char **args)
{
int vet[N]={0},i;
for(i=0;i<N;i++)
{
scanf("%d",&vet[i]);
}
ord(vet,0,N-1);
for(i=0;i<N;printf("\nElemento %d: %d",i,vet[i++]));
getch();
}