int quickSort(int Vet[],int inicio, int fim) { int i, j, pivot, aux; i = inicio; j = fim; pivot = Vet[(inicio + fim)/2]; do { while (Vet[i] < pivot && i < fim) i++; while (pivot < Vet[j] && j > inicio) j--; if (i<=j){ if (i<j){ aux = Vet[i]; Vet[i] = Vet[j]; Vet[j] = aux ; } i++; j--; } }while (i<=j); if(inicio < j) quickSort (Vet, inicio, j); if(i< fim ) quickSort (Vet, i, fim); return 0; }
Observe que para chamar o Quick sort é necessário informar o inicio e o fim, sendo que nos outros podemos definir apenas o tamanho. Isso deve acontecer pois, quando ele for chamado recursivamente os valores do inicio e fim será diferente, nesta etapa que ocorre a divisão do vetor. Por isso é dito que ele usa o método dividir para conquistar. Abaixo, a mesma implementação com a chamada da função no main:
#include <stdio.h> int quickSort(int Vet[],int inicio, int fim) { int i, j, pivot, aux; i = inicio; j = fim; pivot = Vet[(inicio + fim)/2]; do { while (Vet[i] < pivot && i < fim) i++; while (pivot < Vet[j] && j > inicio) j--; if (i<=j){ if (i<j){ aux = Vet[i]; Vet[i] = Vet[j]; Vet[j] = aux ; } i++; j--; } }while (i<=j); if(inicio < j) quickSort (Vet, inicio, j); if(i< fim ) quickSort (Vet, i, fim); return 0; } int main() { int vet[10] = {9,8,6,1,5,2,6,4,0,6}, i; quickSort(vet, 0, 9); //imprime vetor ordenado printf("Vetor ordenado: "); for(i = 0; i < 10; i++) printf("%d, ",vet[i]); }
Nenhum comentário:
Postar um comentário