1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ordem decrescente.

Discussão em 'Programação' iniciada por tuning, 20 de Janeiro de 2008. (Respostas: 9; Visualizações: 1427)

  1. tuning

    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á.
     
  2. m00s

    m00s Power Member

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

    spastikman Banido

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

    souto To fold or to FOLD?

    ou o merge sort
     
  5. tuning

    tuning Power Member

    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?
     
  6. [knap]

    [knap] Power Member

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

    tuning Power Member

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

    koust Power Member

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

    tuning Power Member

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

    koust Power Member

    sim, claro :) parabens e abraços
     

Partilhar esta Página