Ordem decrescente.

tuning

Power Member
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:

Código:
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á.
 
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
 
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.
 
boas, usando o qsort não estou a obter uma ordenação correcta.

Código:
[B]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[/B]
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:

Código:
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?
 
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.
 
[knap];2459966 disse:
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.
 
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
 
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.
 
Back
Topo