Ir ao conteúdo
  • Cadastre-se

Ajuda no Quicksort em programa completo


Air-Gear

Posts recomendados

Bem, meu problema é o seguinte:

A minha professora passou um código de Quicksort no quadro e pediu para implementar no computador. Esse é o código:

void particao (int esq, int dir, int *i, int *j, Item *A)

{

Item x, w;

*i = esq;

*j = dir;

x = A[((*i)+(*j))/2]; //obtem o pivo

do

{

while (x.chave > A[*i].chave) (*i)++;

while (x.chave < A[*j].chave) (*j)--;

if (*i <= *j)

{

w = A[*i];

A[*i] = A[*j];

A[*j] = w;

(*i)++;

(*j)--;

}

}while (*i <= *j);

}

void Ordena (int esq, int dir, Item *A){

int i, j;

particao (esq,dir,&i,&j,A);

if (esq < j) Ordena (esq,j,A);

if (dir > i) ordena (i,dir,A);

}

void Quicksort (Item *A, int n)

{ Ordena (0,n-1,A);}

Ela sugeriu que nós pegassemos um código pronto no site do "Projeto de Algoritmos" de Nivio Ziviani, que o livro que a professora usa, para ter uma ideia de como criar o programa. Então eu fiz o programa só que eu não conseguir criar um "int main"(programa principal) que funcionasse bem. Esse é o meu programa:

#include <stdio.h>

#include <limits.h>

typedef long ChaveTipo;

typedef struct Item {

ChaveTipo chave;

/* outros componentes */

} Item;

typedef int Indice;

void particao (int esq, int dir, int *i, int *j, Item *A)

{

Item x, w;

*i = esq;

*j = dir;

x = A[((*i)+(*j))/2]; //obtem o pivo

do

{

while (x.chave > A[*i].chave) (*i)++;

while (x.chave < A[*j].chave) (*j)--;

if (*i <= *j)

{

w = A[*i];

A[*i] = A[*j];

A[*j] = w;

(*i)++;

(*j)--;

}

}while (*i <= *j);

}

void Ordena (int esq, int dir, Item *A){

int i, j;

particao (esq,dir,&i,&j,A);

if (esq < j) Ordena (esq,j,A);

if (dir > i) ordena (i,dir,A);

}

void Quicksort (Item *A, int n)

{ Ordena (0,n-1,A);}

void Imprime(Item *A, Indice *n)

{ for (i = 1; i <= *n; i++)

printf("%d ", A.chave); printf("\n");

}

void Copia(Item *Fonte, Item *Destino, Indice *n)

{ for (i = 1; i <= *n; i++)

Destino = Fonte;

}

void Testa(Item *A, Indice *n)

{ for (i = 2; i <= *n; i++) {

if (A.chave < A[i-1].chave) {

printf("ERRO: ");

Imprime(A, n);

return;

}

}

printf("OK: ");

Imprime(V, n);

}

int main(int argc, char *argv[])

{ Vetor B;

n = 20;

printf("Quicksort ");

QuickSort(B, &n);

Testa(B, &n);

Copia(A, B, &n);

return 0;

system ("pause");

}

Pelo que que entendi, o Quicksort pega dois valores de um vetor e compara quem é maior e quem é menor e coloca ordenado. O compilador que eu uso é Dev-C++ e o meu Windows é XP.

Alguém pode me ajudar neste programa?

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!