View Full Version : Ordem decrescente.


tuning
20-01-2008, 03:40
Boas,

tenho estado a desenvolver o trabalho de gestão de viaturas de uma auto estrada, que já tem sido falado aqui no fórum.

Na parte do excesso de velocidade, vou guardando dados num vector. Acedendo a esse vector com:


int k;
for(k=0;k<n_viaturas;k++){
if(vector_velocidades[k]>=120.00){
printf("%.2f\n",vector_velocidades[k]);
}
}

tenho a seguinte lista:

183.39
199.89
123.63
183.49
185.95
141.29
139.86
169.81
153.19
122.28
153.58
169.01
196.94
161.87
170.45
190.68
166.05
187.21
136.36
171.76
133.63
153.85
161.29
146.70
169.01
154.24
128.30
170.78
165.14

Pensando agora no método para a ordenar da maior para a menor ocorrência, estou na dúvida sobre o método a usar. Pesquisei sobre o bubblesort em C e obtive estes códigos na Wikipedia. http://pt.wikipedia.org/wiki/Bubblesort#C

Como é um método que nunca usei, gostaria de saber se será o mais adequado.. e se será só dar como entrada o meu vector com as velocidades para obter a lista ordenada.

Obrigado desde já.

m00s
20-01-2008, 09:49
sim, usa o bubblesort. podes optimizar ainda o código do bubblesort tipico pois há variantes.
se usares ponteiros tb se torna mais simples...mas isso sou eu

usa a bubblesort como funçao e cria uma funçao para o print...

ficarias com algo:

...
bubblesort(lista);
...
print_array(lista);
...


é apenas uma sugestão claro

spastikman
20-01-2008, 11:40
o bulble sort é porreiro para listas pequenas.

bubble sort, shell sort, quick sort, etc. Investiga um pouco os métodos de ordenamento de cada. Preferencialmente usaria o shell sort.

souto
20-01-2008, 11:48
ou o merge sort

tuning
20-01-2008, 14:46
boas, usando o qsort não estou a obter uma ordenação correcta.


122.28
123.63
128.30
139.86
146.70
153.58
161.87
165.14
169.01
169.01
170.78
183.49
185.95
196.94
199.89
133.63
136.36
141.29
153.19
153.85
154.24
161.29
166.05
169.81
170.45
171.76
183.39
187.21
190.68


usando:


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

.........
..........

qsort (vector_velocidades, n_viaturas, sizeof(int), compare);




como se pode ver na lista, obtenho 2 sub listas.. o que estará a causar isto?

[knap]
20-01-2008, 14:50
O quicksort é assim que funciona, vai dividindo o vector em vectores mais pequenos e depois no fim junta tudo.

Não sei é como funciona essa função qsort() e se era suposto ela dar logo tudo ordenado.

tuning
20-01-2008, 15:14
;2459966']O quicksort é assim que funciona, vai dividindo o vector em vectores mais pequenos e depois no fim junta tudo.

Não sei é como funciona essa função qsort() e se era suposto ela dar logo tudo ordenado.

Já vi exemplos em arrays com 7 posições e funcionou. Mas não vou perder mais tempo nisto.. vou avançar com vector e comparação de posiçoes.. assim o valor máximo vai sendo actualizado e depois é só chamá-los.

koust
20-01-2008, 16:20
Eu já tenho o programa feito. Usa o bubble sort, puxa um pouco pela cabeça e chegas lá :)

atençao que tens 2 velocidades repetidas:
169.01
169.01

isto é mesmo assim (nos dados do reg.dat). é possivel que te crie conflitos e tens que ter atençao a isso (a mim deu-me umas certas dores de cabeça :freak3:)

abraços

tuning
20-01-2008, 17:05
Eu já tenho o programa feito. Usa o bubble sort, puxa um pouco pela cabeça e chegas lá :)

atençao que tens 2 velocidades repetidas:
169.01
169.01

isto é mesmo assim (nos dados do reg.dat). é possivel que te crie conflitos e tens que ter atençao a isso (a mim deu-me umas certas dores de cabeça :freak3:)

abraços

existem dois carros com igual velocidade. mas estão em percursos diferentes.

também tenho o programa concluído, simplesmente estou a fazer umas experiências com este sort.

koust
21-01-2008, 14:41
existem dois carros com igual velocidade. mas estão em percursos diferentes.

também tenho o programa concluído, simplesmente estou a fazer umas experiências com este sort.

sim, claro :) parabens e abraços