Ir ao conteúdo
  • Cadastre-se

Vetores


jiz/df

Posts recomendados

Este algoritmo feito em pascal deve quebrar o galho! Com certeza não é o melhor, mas em cima do laço deve ajudar!

Program Ordenar;

Uses    Fdelay,Crt;

Var     Vetor : array [1..10] of integer;

       x,y,aux : integer;

Begin

    clrscr;

    for x:=1 to 10 do

        begin

             readln(vetor[x]);

        end;

    writeln ('Ordenar');

    For x:=1 to 9 do

        begin

              if vetor[x+1] < vetor[x] then

                 begin

                      aux:=vetor[x+1];

                      vetor[x+1]:=vetor[x];

                      vetor[x]:=aux;

                 end;

              if x=9 then

                 for y:=1 to 9 do

                     if vetor[y+1] < vetor[y] then

                        x:=1;

        end;

    readkey;

End.

Link para o comentário
Compartilhar em outros sites

Postado Originalmente por Edy Junior@04 Jul. 2002, 21:28

Este algoritmo feito em pascal deve quebrar o galho! Com certeza não é o melhor, mas em cima do laço deve ajudar!

Hehe... esse código não lembra o Bubble Sort nem de longe... e prá variar você fez um loop infinito, q num ordena nada...  :P

Aqui vai um Bubble Sort, em C:


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

#define MAX  20
#define TROCA(x, y)     {             \
                       int aux = x;  \
                       x = y;        \
                       y = aux;      \
                       }

void bubble( int vet[], int tamanho ) {
   register int a, b;

   printf("Ordenando...");    
   for ( a=1; a<tamanho; ++a )
       for ( b=tamanho-1; b>=a; --b )
               if ( vet[b-1] > vet[b] )
                  TROCA(vet[b-1], vet[b]);
   printf("OK\n");
}

int main(void) {
 int vetor[MAX], i;

 /* inicializa o vetor com numeros aleatorios */
 srand((unsigned)time(0));
 for (i=0; i<MAX; i++) {
   vetor[i] = rand();
   printf("%d\n", vetor[i]);
 }
 system("PAUSE");

 /* faz a ordenação */
 bubble(vetor, MAX);

 /* mostra o vetor ordenado na tela */  
 for (i=0; i<MAX; i++)
   printf("%d\n", vetor[i]);
 system("PAUSE");
 return 0;
}

Link para o comentário
Compartilhar em outros sites

Ola,

estou mandando também um em ling. C. Declarei q no maximo meu vetor ira ter 30 posições (#define MAX 30), mas para utilizar um vetor de tamanho desconhecido, você pode utilizar ponteiros...

[]'s

#include <stdio.h>

#include <conio.h>

#define MAX    30

void main (void)

{

  int vetor[MAX], //vetor de entrada

                    n, // no. de elementos do vetor

                     i, // contador

                     j, // contador

                 aux, // auxilar para troca

  // Leitura do vetor

  printf ("Entre com numero max de elementos do vetor: ");

  scanf ("%d",&n);

  for (i=0;i<=(n-i);i++){

     printf ("Entre com o %d elemento do vetor ", (i+1));

     scanf ("%d",&vetor);

  }

for (i=1;i<=n-1;i++)

  for (j=0;j<=n-1-i;j++)

     if (vetor>vetor[j+i])

     {

        aux=vetor;

        vetor[j]=vetor[j+1];

        vetor[j+1]=aux;

     }

  //impressao do vetor ordenado

  for (i=0;i<=(n-1);i++)

     printf ("vetor[%d] = %d\n",i,veto;

  getch();

}

ps: digitei diretamente aqui, pode ser q de algum erro de digitação. Este programa funcionou normalmente compilado no gcc (Linux).

Link para o comentário
Compartilhar em outros sites

Heh... se eu disse que não funciona é porque eu peguei o código que você postou, compilei, testei e não funcionou. d-:

Tenta ordenar esses dados, colocando nessa ordem:

4, 6, 7, 8, 9, 1, 2, 5, 7, 8.

Em todos os compiladores de pascal que eu tentei, ele cai num loop infinito, tem q dar um CTRL+Break.

Acho que você deve ter errado alguma parte do código na hora de copiar ele no fórum...

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

esse modo é muito mais rápido>>>

void sort(int vetor[], int pri, int ult)

{

int i;

int b, a, sep;

b=pri;

a=ult;

sep=vetor[(pri + ult)/2];

do

{

while(vetor < sep)

b++;

while(vetor[a]>sep)

a--;

if(b<=a)

{

i=vetor;

vetor[b++]=vetor[a];

vetor[a--]=i;

}

}

while (b<=a);

if(pri<a)

sort(vetor,pri, a);

if(b<ult)

sort(vetor,b,ult);

}

Link para o comentário
Compartilhar em outros sites

Este é legal, o clássico QuickSort recursivo. Realmente ele é o mais rápido de todos, especialmente na versão não-recursiva.

Alguns detalhes a lembrar desse método: se o sistema tiver um stack muito pequeno e o vetor a ordenar for muito grande, pode acabar havendo um estouro da pilha, se for usada a versão recursiva. (tá, o Windows tendo um stack de +/- 4MB é difícil isso acontecer, eu sei  :P ).

Mas um detalhe mais importante é o fato de que, dependendo da implementação do algoritmo usada, qualquer ordenação prévia do vetor pode degenerar o quicksort, e deixá-lo muito lento.

Ah, e quem quiser usar o QuickSort prá ordenar algum vetor, não precisa digitar todo o algoritmo, pode muito bem usar a função da biblioteca padrão:

#include <stdlib.h>

qsort()

PS: em listas muito pequenas (menos de 100 elementos) o tempo necessário prás suas chamadas recursivas pode deteriorar o desempenho; em alguns casos dá-se até preferência ao método da Bolha (uma das piores ordenações já concebidas).

Link para o comentário
Compartilhar em outros sites

A galera aqui gosta de ordenação !!  Quicksort, shellsort, HeapSort e assim vai !!  use qualquer um !! até o seleção direta vai ! (vai mal, mas vai)

mas não apele para o metodo da bolha !!

pesquisa eu recomendo uso de tabela hashing !!  

eu adoro esse algoritimo (lógico que hashing por encadeamento)

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...