Algoritmo Quick Sort em C (Quicksort)

//================================================================
// Nome Do Arquivo: quick.c
// File Name: quick.c
//
// Descrição: Implementação do algoritmo quicksort
// Description: Quick sort Algorithm
//================================================================

// Libs
#include <stdio.h>
#include <stdlib.h>

// Define uma constante
// Define a constant
#define MAX 10

// Protótipo da função de ordenação
// Ordination function prototype
void quick_sort(int *a, int left, int right);

// Função main
// Main Function
int main(int argc, char** argv)
{
 int i, vet[MAX];

 // Lê MAX ou 10 valores
 // Read MAX or 10 values
 for(i = 0; i < MAX; i++)
 {
  printf("Digite um valor: ");
  scanf("%d", &vet[i]);
 }

 // Ordena os valores
 // Order values
 quick_sort(vet, 0, MAX - 1);

 // Imprime os valores ordenados
 // Print values in order ascendant
 printf("nnValores ordenadosn");
 for(i = 0; i < MAX; i++)
 {
  printf("%dn", vet[i]);
 }
 system("pause");
 return 0;
}

// Função de Ordenação por Seleção
// Quick sort function
void quick_sort(int *a, int left, int right) {
	int i, j, x, y;
	
	i = left;
	j = right;
	x = a[(left + right) / 2];
	
	while(i <= j) {
		while(a[i] < x && i < right) {
			i++;
		}
		while(a[j] > x && j > left) {
			j--;
		}
		if(i <= j) {
			y = a[i];
			a[i] = a[j];
			a[j] = y;
			i++;
			j--;
		}
	}
	
	if(j > left) {
		quick_sort(a, left, j);
	}
	if(i < right) {
		quick_sort(a, i, right);
	}
}

  • Caio

    Muito bom o site.
    Ei, as linhas 50 e 51 estão dizendo seleção, mas o algoritmo é do quick mesmo.
    Até logo e Parabéns.

    • http://viniciushipolito.wordpress.com viniciushipolito

      Caio, corrigido.

      Obrigado pela colaboração.

      Abraços.

  • Jackson Felipe

    Sabe me dizer se há como fazer o método de ordenação Quicksort em Lista Duplamente Encadeada? Tô tentando fazer, mas retorna muito erro e o trabalho vale nota.

    • admin

      Oi Jackson,

      nesse link você encontra exatamente o que procura:
      http://www.comp.ita.br/~pauloac/ces10/quicksort.pdf

      Em breve devo criar um código comentado sobre esse assunto aqui no blog.

      Abraços

      • Jackson Felipe

        Obrigado pela ajuda Vinícius, vou dar uma olhada no código.

  • Sergio Nascimento

    Cada trabalho deverá explorar a utilização de chamadas de funções além da main(), operar matrizes.
    Quick Sort, com menu definindo tipo, tamanho da matriz, se dados alfanuméricos ou só numéricos. Criar matriz inserindo dados, guardar em arquivo, depois do arquivo criado, ordenar e transferir para outro arquivo final. Tudo Visível em Tela.
    Como faço isso?