Buscar

Quickssort

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include<stdio.h>
#include<stdlib.h>
void Swap(int* a, int* b){
	int temp = *a;
	*a = *b;
	*b = temp;
}
int Partition(int* data, int left, int right){
	
	int x = data[right];
	int i = (left - 1);
	for (int j = left; j <= right - 1; ++j)
	{
		if (data[j] <= x)
		{
			++i;
			Swap(&data[i], &data[j]);
		}
	}
	Swap(&data[i + 1], &data[right]);
	return (i + 1);
}
void QuickSort(int* data, int count) {
	int i = 0;
	int j = count - 1;
	int f = -1;
	int* stack = (int*)malloc(sizeof(int) * count);
	stack[++f] = i;
	stack[++f] = j;
	while (f >= 0)
	{
		j = stack[f--];
		i= stack[f--];
		int p = Partition(data, i, j);
		if (p - 1 > i)
		{
			stack[++f] = i;
			stack[++f] = p - 1;
		}
		if (p + 1 < j)
		{
			stack[++f] = p + 1;
			stack[++f] = j;
		}
	}
	free(stack);
}
void imprimir(int v[], int tam){
	int i;
	for (i=0; i < tam; i++)
		printf("%d ", v[i]);
	printf("\n");
}
int main(){
	
	int v[10] = {10,9,8,7,6,5,4,3,2,1};
	
	int n = sizeof(v)/sizeof(v[0]);
	
	imprimir(v,10);
	
	QuickSort(v,n);
	
	printf("\n\n");
	
imprimir(v,10);
		
	
	return(0);
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais