Recursión: Quicksort recursivo

quicksort recursivo.html
#include <stdio.h>
#include <stdlib.h>

void quicksort(int[],int);

int main(){
	
	static int lista[] = {9,3,88,5,13,10,27,6,18,3};
	int n_elementos = sizeof(lista)/sizeof(int);
	
	register i;
	
	quicksort(lista, n_elementos);
	
	printf("\nLista ordenada: \n");
	for(i=0; i<n_elementos; i++){
		printf("%6d", lista[i]);
	}

	system("pause");
	return 0;
}
// Quicksort
void qs(int[], int, int);

void quicksort(int lista[], int n_elementos){
	
	qs(lista,0,n_elementos-1);
}
// Funcion recursiva
void qs(int lista[], int inf, int sup){
	register izq, der;
	int mitad, x;
	
	izq = inf;
	der = sup;
	mitad= lista[(izq+der)/2];
	
	do{
		while(lista[izq]<mitad && izq < sup){
			izq++;
		}
		while(mitad<lista[der] && der>inf){
			der--;
			
			if(izq<=der){
			x = lista[izq];
			lista[izq] = lista[der];
			lista[der] = x;
			izq++;
			der--;
			}
		}
		
	}while(izq<=der);
	
	if(inf<der){
			qs(lista,inf,der);
		}
		if(izq<sup){
			qs(lista,izq,sup);
		}
}

No hay comentarios:

Publicar un comentario