Jump to content

[How To] Ordenaçao de vectores


cartoon
 Share

Recommended Posts

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

Link to comment
Share on other 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.

cool stuffs to check.

http://blog.zxcoders.com//

Link to comment
Share on other 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

Link to comment
Share on other 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

Link to comment
Share on other 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

www.rgcouto.net

Link to comment
Share on other 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

Link to comment
Share on other 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...

Link to comment
Share on other 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').

Link to comment
Share on other 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.

Link to comment
Share on other 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;
}
Link to comment
Share on other 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;
}
Link to comment
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
 Share

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