Thiago Cantero

Tecnologia e Entretenimento

AlgoritmoMatemáticaPHPProgramação

Algoritmo de Ordenação – Introdução para base de estudos.

Olá, mundo!
Tudo bem?

Hoje venho com conceitos bem básicos acerca o desenvolvimento, falarei sobre os algoritmos de ordenação, mas antes vamos entender o que são afinal os algoritmos.

Introdução

O Ser Humano se difere dos demais animais pelo poder de Cognição, desde os primórdios de nossa História são evidenciadas estas teses, como grandes Mentes que aqui existiram de Eratóstenes à Carl Sagan, os exemplos de Cientistas são os mais variados e contribuíram para que eu, e você pudêssemos desfrutar deste canal de comunicação para difusão de conhecimento, por exemplo. Isto é uma escala evolutiva, é óbvio.

Mas em que se aplica o algoritmo, o que significa?O que isso tem a ver com códigos?Tudo meu caro(a), em termos absolutos, tudo!Vejamos a definição:

Em matemática e ciência da computação, um algoritmo é uma sequência finita de ações executáveis que visam obter uma solução para um determinado tipo de problema. Ziviani, N. Projeto de Algoritmos com Implementações em Pascal e C, São Paulo, 2004, pág. 1.

Partindo deste conceito bem definido vejamos como se comporta alguns algoritmos de ordenação.

Vamos ao Trabalho\\

Demonstrarei alguns algoritmos de ordenação com o intuito de ofertar os conceitos na práxis, existe muita literatura acerca o tema, como referenciei acima, e como sempre ressalto a importância de entender as minúcias deste assunto, pois ele é aplicável a qualquer cenário, linguagem, afinal é uma ciência em sua escala evolutiva, lembra-se de nossa introdução?  ; )

Bubble Sort

O Bubble sort é um algoritmo mais simplista que tem o objetivo de comparar os valores de uma lista, e colocá-los em ordem crescente.

Vejamos um exemplo, um array com estes valores  [ 1, 38, 23, 98, 25, 5, -12 ]. Obviamente, se pensarmos nos números naturais, essa sequência está absolutamente errada. Para tal, usaremos o Bubble Sort.

bubble sort, ou ordenação por flutuação (literalmente “por bolha”), é um algoritmo de ordenação dos mais simples. A ideia é percorrer o vector diversas vezes, e a cada passagem fazer flutuar para o topo o maior elemento da sequência. Essa movimentação lembra a forma como as bolhas em um tanque de água procuram seu próprio nível, e disso vem o nome do algoritmo. Wikipedia

Em notação matemática, temos algo similar:

i = 0n 2 (n1i) = (n1) + (n2) +...+ 2 + 1 = (n1)n / 2

Faremos uma soma de termos finitos, compará-los com os valores adjacentes e dividirmos por dois. Para melhor evidenciar este algoritmo matemático, vejamos o seguinte cenário:

Uma Listagem com quatro valores [ 9, -5, 43, 18].

Como podemos observar, a sequência dos números naturais expostos sofreu alteração em três passos, em que na primeira houve a comparação entre os valores “9 e -5”, na segunda interação a comparação entre  “9 e 43”, os colocando posteriormente na ordem crescente, e por fim a comparação entre “43 e 18”, finalizando com a lista em cor verde devidamente ordenada.

 

Para exemplificarmos vejamos o código abaixo com os valores que já deixamos citatos.

<?php
// Função BubbleSort
function BubbleSort(&$Array, $n) {
  
  for($i=0; $i<$n; $i++) {
    for($j=0; $j<$n-$i-1; $j++) {
      if($Array[$j]>$Array[$j+1]) {
        $variavel = $Array[$j];
        $Array[$j] = $Array[$j+1];
        $Array[$j+1] = $variavel;
      }
    }
  }
}

// Função para expor os valores do Array
function ExpoeArray($Array, $n) { 
  for ($i = 0; $i < $n; $i++) 
    echo $Array[$i]." ";
  echo "\n"; 
} 

// Testando o Código
$Lista = array(1, 38, 23, 98, 25, 5, -12);
$n = sizeof($Lista); 
echo "Listagem de Números Desordenados\n";
ExpoeArray($Lista, $n);

BubbleSort($Lista, $n);
echo "\nListagem de Números Ordenada pelo Algoritmo BubbleSort\n";
ExpoeArray($Lista, $n);

Veja o código executado.

Como podemos observar, a listagem foi devidamente ordenada, colocando os valores como bolhas flutuantes, com seus devidos pesos, e ordenando de maneira crescente.

Existem diversos algoritmos de ordenação com a mesma finalidade, alguns mais sofisticados que inclusive tem seu tempo de execução melhorado, aplicando melhor os recursos de hardware, como alternação de filas na memória Stack.

Este artigo foi breve, no entanto com o intuito de expor o quão é fascinante, e ao mesmo tempo, importante a matemática, a cognição, e principalmente a perfeita compreensão da abstração envolvida na área. Nosso cérebro é superior a qualquer máquina, para tal devemos sempre praticar.

Espero que tenha contribuído com seus estudos, até a próxima! ; )

Quem é firme em seus propósitos molda o mundo a seu gosto.