Jump to content
cartoon

[How To] Ordenaçao de vectores

Recommended Posts

cartoon

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

Share this post


Link to post
Share on other sites
David Pintassilgo

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.


cool stuffs to check.

http://blog.zxcoders.com//

Share this post


Link to post
Share on other sites
mrodrigues

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

Share this post


Link to post
Share on other sites
theproject

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

Share this post


Link to post
Share on other sites
cartoon

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

Share this post


Link to post
Share on other sites
rgcouto

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


www.rgcouto.net

Share this post


Link to post
Share on other sites
vbmaster

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

Share this post


Link to post
Share on other sites
freesumo

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

Share this post


Link to post
Share on other sites
freesumo

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

Share this post


Link to post
Share on other sites
Rui Carlos

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

Share this post


Link to post
Share on other sites
Warrior

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.

Share this post


Link to post
Share on other sites
Warrior

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;
}

Share this post


Link to post
Share on other sites
Warrior

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;
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.