cartoon Posted January 9, 2006 at 08:16 PM Report #11364 Posted January 9, 2006 at 08:16 PM 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...
David Pintassilgo Posted January 9, 2006 at 08:22 PM Report #11365 Posted January 9, 2006 at 08:22 PM 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//
mrodrigues Posted January 9, 2006 at 08:39 PM Report #11368 Posted January 9, 2006 at 08:39 PM 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
theproject Posted January 10, 2006 at 04:39 AM Report #11411 Posted January 10, 2006 at 04:39 AM 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
cartoon Posted January 10, 2006 at 07:12 PM Author Report #11453 Posted January 10, 2006 at 07:12 PM fogu... mesmu axim n m ta a bater certu:ds to fartu d dar voltax a ixtu... alguem me arranja u codigo????
Warrior Posted January 10, 2006 at 10:14 PM Report #11462 Posted January 10, 2006 at 10:14 PM Linguagem?
David Pintassilgo Posted January 10, 2006 at 10:51 PM Report #11470 Posted January 10, 2006 at 10:51 PM Se for em VB e se comecares a usar S em vez de X ( ;D ) ainda se arranja qualquer coisa! 😉 cool stuffs to check. http://blog.zxcoders.com//
saramgsilva Posted January 19, 2006 at 05:49 PM Report #12059 Posted January 19, 2006 at 05:49 PM 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... www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
rgcouto Posted February 14, 2006 at 11:11 PM Report #14020 Posted February 14, 2006 at 11:11 PM 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
vbmaster Posted February 14, 2006 at 11:24 PM Report #14021 Posted February 14, 2006 at 11:24 PM tenss o bublesorte, como a tofa disse, mas existem muitos mais algoritmos de ordenação de vectores.
freesumo Posted February 15, 2006 at 08:48 AM Report #14024 Posted February 15, 2006 at 08:48 AM 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
freesumo Posted February 15, 2006 at 10:08 AM Report #14027 Posted February 15, 2006 at 10:08 AM 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...
Rui Carlos Posted July 24, 2006 at 11:43 PM Report #40072 Posted July 24, 2006 at 11:43 PM 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'). Rui Carlos Gonçalves
Warrior Posted July 25, 2006 at 10:19 AM Report #40109 Posted July 25, 2006 at 10:19 AM 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.
Warrior Posted July 25, 2006 at 10:22 AM Report #40110 Posted July 25, 2006 at 10:22 AM 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; }
Warrior Posted July 25, 2006 at 10:25 AM Report #40113 Posted July 25, 2006 at 10:25 AM 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; }
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now