Ir para o conteúdo
PsySc0rpi0n

Array Sorting

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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)
   }
}

Editado por HappyHippyHippo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.