• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

cartoon

[How To] Ordenaçao de vectores

16 mensagens neste tópico

oix a todx..

tipo... foim pedido para efectuar barias operaçoes com vectores.... uma delas e a ordenaçao mas tou a ter problemas nisso.....

tenho k ter um vector com 6 nums.... e depoix o programa tem k ordenar exes numeros... alguem me pode ajudar???

cumps...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas! Bem vindo.

A ordenação de valores num vector é algo ate´relativamente simples. Precisas de ter uma variavel de caracter temporario para guardar o valor na latura da troca.

Crias 2 ciclos for dentro um do outro de forma a confirmar se o 1º é menor que o 2º. se for, tudo bem passa para a conparação do 2º com o 3º se não for faz-se a troca dos valores com a ajuda da variavel temp.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Existem muitas formas de ordenação, umas mais correctas que as outras, umas mais rápidas que as outras, em determinados casos ou não.

Uma forma, talvez a mais básica, é a que o d_pintassilgo descreveu (bubblesort ou muito parecido).

Bom, deixo um link com algoritmos de ordenação, se quiseres, podes analisar e ver qual o melhor para o teu programa.

http://en.wikipedia.org/wiki/Sort_algorithm

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O mais simples de todos  é o selection sort, no entanto e muito lento se tiveres de ordenar muitos objectos. Para 6 numeros e mais do k suficiente. Pegas no array, percorres o array todo a procura do menor numero de todos (vais guardando a posicao do mais pekeno k encontras ate ao momento).Quando xegares ao fim do array tens a posicao do mais pequeno e o k fazes é trocar a primeira posicao do array com a posicao do mais pekeno. Neste momento tens o elemento mais pekeno do conjunto na primeira posicao (porreiro). Agora voltas a repetir isto tudo mas nao consideras a primeira posicao, ie, vais a procura do 2º mais pekeno do conjunto para o meteres na 2ª posicao. Este algoritmo termina quando apenas tiveres de processar um elemento.

[] cya

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fogu... mesmu axim n m ta a bater certu:ds to fartu d dar voltax a ixtu... alguem me arranja u codigo????

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se for em VB e se comecares a usar S em vez de X ( ;D  :wallbash:) ainda se arranja qualquer coisa!  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

em java existe uma classe com um metodo que faz a ordenação de um vector...mas em outras linguagens como o Pascal e C, C++ tens que aplicar algoritmos proprios... bublesort... entre outro, acho que existem prai uns 4  diferentes...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso é mt simples, por acaso tive k fazer isso como TPC a Programação

em VB é algo deste tipo (metodo da bolha, ou lá como lhe chamam)

For n = 0 To 4

    For z = 0 To 4

        If num(n) < num(z) Then

            x = num(z)

            num(z) = num(n)

            num(n) = x

        End If

    Next

Next

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tenss o bublesorte, como a tofa disse, mas existem muitos mais algoritmos de ordenação de vectores.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hyas, pega la nisto e ve se te ajuda, esta em C e foi um pequeno teste que eu fiz, vais ter que fazer ajustes.

#include <alloc.h>
#include <stdio.h>;
#include <windows.h>;
#include <time.h>;

void Sort1(long *, long, long);		/*Prototype*/
void ShowArray(long *, long);		/*Prototype*/

/* 1048576 12515s (3h48m)
    524288  2989s (50m)
    262144   702  (11m42s)
    131072   167s (2m47s)
     65536    42s
     32768    10s
*/

static long full[262144];
long t1, t2, t3;

int main(){
long i;
int array[] = {2, 6, 8, 2, 1, 0, -6, 34, 23, 10, 7, 0, 100, -10, 98, 99};
t1 = (long)clock();
for(i=0;i<262144;i++){
	full[i]= 262144 - i;
}
ShowArray(array, (sizeof(array)/sizeof(long)));
/* Sort1(full, (sizeof(full)/sizeof(long))); */
Sort1(full, 0, 262144);
ShowArray(array, (sizeof(array)/sizeof(long)));
t2 = (long)clock();
t3 = t2 - t1;
printf("--> %ld\n", (sizeof(full)/sizeof(long)));
printf("--> %lds\n", t3/1000);
return 0;
}

void Sort1(long *array, long start, long finish){
	long i=0, j=0, flag=0, temp=0, lastnumber=0, lastoffset=0;
	for(i=start;i<finish;i++){
		lastnumber = array[i];
		lastoffset = i;
		for(j=i+1;j<finish;j++){
			if(array[j]>lastnumber){
				lastnumber = array[j];
				lastoffset = j;
				flag = 1;
			}
		}
		if(flag==1){
			array[lastoffset] = array[i];
			array[i] = lastnumber;
			flag = 0;
		}
	}

}
void ShowArray(long *a, long length){
	int i = 0;
	printf("%d\n", length);
	for(;i<length;i++){
		printf("%d  ", a[i]);
	}
	printf("\n");;
}

Boa sorte...byas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epa!!! faltam coisas, nao faças copy past, o principal

void Sort1(long *array, long start, long finish){
	long i=0, j=0, flag=0, temp=0, lastnumber=0, lastoffset=0;
	for(i=start;i<finish;i++){
		lastnumber = array[ i ];
		lastoffset = i;
		for(j=i+1;j<finish;j++){
			if(array[j]>lastnumber){
				lastnumber = array[j];
				lastoffset = j;
				flag = 1;
			}
		}
		if(flag==1){
			array[lastoffset] = array[ i ];
			array[ i ] = lastnumber;
			flag = 0;
		}
	}

}

acho que ja ta bem...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

em java existe uma classe com um metodo que faz a ordenação de um vector...mas em outras linguagens como o Pascal e C, C++ tens que aplicar algoritmos proprios... bublesort... entre outro, acho que existem prai uns 4  diferentes...

em C (e penso que também em C++) existem as funções 'qsort', 'heapsort' e 'mergesort' na stdlib, se bem que isto é capaz de depender do SO (penso que no Slackware só tinha a 'qsort').

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em C a função qsort é de facto muito util, embora muito dificil de usar também.

Por ser uma função que permite ordernar vectores de numeros, caracteres, ou até mesmo strings, tem um ultimo parametro que exige um apontador para uma função, função essa que devemos ser nós a programar, logo não é fácil para quem acabou de chegar à linguagem trabalhar com ela..

Vou tentar elucidar com exemplos

Estrutura

qsort(vector_a_ordenar,numero_de_campos_do_vector,tamanho_de_cada_campo,comparacao);

O tamanho de cada campo, é dado em bytes. Se queremos ordenar um vector de strings "s", tanto podemos escrever o tamanho de cada elemento directamente (por exemplo, 5) como sizeof(s[0])

A comparação é uma função que se espera que retorne um número.

A função recebe dois elementos (a ser comparados) deve retornar um numero positivo se o primeiro for maior que o segundo, negativo se menor ou 0 se iguais.

Nos proximos posts dou exemplos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aplicado a strings

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

int main() {
    char v[5][30];
    int i;
    strcpy(v[0],"Ola");
    strcpy(v[1],"Adeus");
    strcpy(v[2],"ola");
    strcpy(v[3],"adeus");
    printf("Antes\n");
    for (i=0;i<4;i++)
        printf("%s\n",v[i]);
    qsort(v,4,30,(void *) strcmp);
    printf("\nDepois\n");
    for (i=0;i<4;i++)
        printf("%s\n",v[i]);
    system("PAUSE");
    return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aplicado a inteiros

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

int compare(int *a,int *b) {
   return *a-*b;
}

int main() {
   int v[5];
   int i;
   v[0]=2;
   v[1]=1;
   v[2]=5;
   v[3]=-1;
   printf("Antes\n");
   for (i=0;i<4;i++)
       printf("%d\n",v[i]);
   qsort(v,4,sizeof(int),(void *) compare);
   printf("\nDepois\n");
   for (i=0;i<4;i++)
       printf("%d\n",v[i]);
   system("PAUSE");
   return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora