Jump to content
PsySc0rpi0n

Array Sorting

Recommended Posts

PsySc0rpi0n

Boas...

Ando aqui a inventar um programa que permite executar várias tarefas com arrays de inteiros e strings. Para já ando a tratar das arrays para inteiros e como já não tenho os apontamentos das aulas de programação, andei na net a pesquisar algoritmos para ordenar arrays e encontrei o seguinte:

Selection Sort

Transformei este algorítmo no seguinte code:

int Sort_Array_Int(int *array, int NumElm){
   int lwr;
   int, i, j, t;

   for(i = 0; i < NumElm; i++){
    lwr = i;
    for(j = i + 1; j <= NumElm; j++){
	    if(*(array + j) < *(array + lwr))
		    lwr = j;
    }  
    t = *(array + lwr);
    *(array + lwr) = *(array + i);
    *(array + i) = t;
   }  
}

Já peguei num papel e fiz todos os passos, 1 a 1, mas mesmo assim preciso de ajuda para conseguir perceber bem o algoritmo, tipo passo a passo, linha a linha porque há algumas que não entendo...

Por exemplo, qual a função, no meu caso, da variável "lwr"?

Depois, as últimas 3 linhas de código, sem contar com as chavetas, não podiam ser simplificadas?

Estou com dificuldades em encontrar no código o que está explicado no link que deixei no início!


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
HappyHippyHippo

o "segredo" do algoritmo está no nome dado a este : "selection"

o que irá ser feito é seleccionar um elemento da lista não ordenada e adicinoar à ordenada.

exemplo:

Ord     NOrd
V        V
+-+-------------+
| | 3 7 1 5 2 0 |
+-+-------------+

1º ciclo :
- determina que o elemento mais pequeno da lsita não ordenada encontrasse no índice 5 (valor 0)
- adicionar ao fim da lista ordeanda (trocar o 3 com o 0)

Ord     NOrd
V        V
+---+-----------+
| 0 | 7 1 5 2 3 |
+---+-----------+

1º ciclo :
- determina que o elemento mair pequeno da lsita não ordenada encontrasse no índice 3 (valor 1)
- adicionar ao fim da lista ordeanda (trocar o 7 com o 1)

Ord     NOrd
V        V
+-----+---------+
| 0 1 | 7 5 2 3 |
+-----+---------+

// etc ...
// etc ...
// etc ...

int Sort_Array_Int(int *array, int NumElm){
   int lwr;
   int, i, j, t;

   for(i = 0; i < NumElm; i++){                          // ciclo externo que irá ordenar NumElm elementos
       lwr = i;                                          // assumir à pertida que o menor elemento é o primeiro elemento da lista não ordenada
       for(j = i + 1; j <= NumElm; j++){                 // ciclo interno que irá iterar os elementos da lista não ordenada
           if(*(array + j) < *(array + lwr))             // verificar se o elemento iterado é menor que o elemento assinalado como o menor "lwr"
               lwr = j;                                  // assinalar o elemento iterado como o menor
       }

       t = *(array + lwr);                               // código para trocar os elementos no índice "lwr" com o na posição "i"
       *(array + lwr) = *(array + i);                    // ...
       *(array + i) = t;                                 // ... (o código de simplificação de troca è demasiado complicado para por aqui)
   }
}

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
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

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