Métodos de Ordenação de Vetores

Ordenação pelo Método Bolha

> O Método Bolha, também chamado de Bubble Sort, é um método de ordenação de vetores por seleção e troca. É um dos métodos mais simples, mas, dentre todos os métodos simples, é o mais eficaz. É adequado apenas para arquivos pequenos.
Esse método funciona da seguinte forma: esse método irá percorrer o vetor várias vezes e, durante a análise, ele irá comparar os valores dois a dois e, caso estejam fora da ordem, esse algoritmo trocará a posição desses valores, deixando estes ordenados, ou seja, deixando-os em ordem crescente. Isso irá se repetir com todas as posições do vetor até a última posição, garantindo que o elemento de maior valor seja levado para a última posição.
Vale ressaltar que o tempo de consumo do Bubble Sort é proporcional ao número de execuções da comparação sendo que, no melhor caso, o algoritmo executa n²/2 operações relevantes, onde n representa o número de elementos do vetor e, no pior caso, são feitas 2n² operações no vetor.
Se o vetor a ser ordenado for colocado na vertical, com o Item[n] em cima e Item[1] embaixo, durante cada passo o menor elemento “sobe” até encontrar um elemento maior ainda, como se uma bolha subisse dentro de um tudo de acordo com sua densidade e, por isso, esse método recebe o nome de “bolha”. 

Exemplo:

#include
int main(void)
{
int i, j,v[100], n, temp;
for (i = n - 1; i > 0; i--)
                           for (j = 0; j < i; j++)
                               if (v[j] > v[j+1])
                              {
                                   temp = v[j];
                                   v[j] = v[j+1;
                                   v[j+1 = temp;
                               }
return 0;
}

Método da Bolha Melhorado

            O Método da Bolha Melhorado é o próprio método bolha, mas com algumas alterações. Esse método é finalizado quando nenhuma alteração foi feita após uma passada no vetor, diminuindo o tempo de consumo do algoritmo.

Exemplo:

            #include
int main(void)
{
     int i, j, v[100], n, temp, troca;
     troca = 1;
           for (i= n-1; (i >= 1) && (troca == 1); i--) {
           troca = 0;
                for (j= 0; j < i ;j++) {
                    if (v[j] < v[j+1]) {
                          temp = v[j];
                          v[j] = v[j+1];
                          v[j+1] = temp;
                          troca = 1;
                     }
                 }
           }
      return 0;
}


Ordenação pelo Método Quicksort

            O Método Quicksort é o algoritmo de ordenação interna mais rápido que se conhece para uma ampla variedade de situações, sendo provavelmente mais utilizado do que qualquer outro algoritmo. O algoritmo foi inventado por C. A. R. Hoare na década de 1960, quando visitava a Universidade de Moscou como estudante. Esse algoritmo foi publicado em 1962, depois de uma série de refinamentos.
            A ideia básica do Quicksort é partir o problema de ordenar um conjunto com n itens em dois problemas menores. Depois de dividir o problema, os problemas menores são ordenados independentemente e depois os resultados são combinados para produzir a solução do problema maior.
            A parte mais delicada desse método se refere à divisão da partição. Deve-se rearranjar o vetor na forma A[Esq..Dir] através da escolha arbitrária de um item x do vetor chamado pivô, de tal forma que ao final o vetor A está particionado em uma parte esquerda com chaves menores ou iguais a x e uma parte direita com chaves maiores ou iguais a x.
            O Procedimento do Algoritmo Quicksort se dá da seguinte forma:
            1. Escolher arbitrariamente um item do vetor e colocar este valor em x;
2. Percorrer o vetor a partir da esquerda até que um item A[i] ³ x é encontrado; da mesma maneira, percorrer o vetor a partir da direita até que um item A[j] £ x é encontrado;
3. Como os itens A[i] e A[j] não estão na ordem correta no vetor final, eles devem ser trocados;
4. Continuar o processo até que os índices i e j se cruzem em algum ponto do vetor.

Ao final do processo, o vetor A[Esq..Dir] está particionado de tal forma que:

>> Os itens em A[Esq], A[Esq+1], ... , A[j] são menores ou iguais a x.
>> Os itens A[i], A[i+1], ... , A[Dir] são maiores o iguais a x.

            O método é ilustrado para o conjunto de seis chaves apresentado na figura abaixo. O item x é escolhido como sendo A[(i+j)div2]. Como inicialmente i = 1 e j = 6, então x = A[3] = D, o qual aparece em destaque na segunda linha da mesma figura. A varredura a partir da posição 1 pára no item O e a varredura a partir da posição 6 pára no item A, sendo os dois itens trocados, como mostrado na terceira linha da figura. A seguir, a varredura a partir da posição 2 pára no item R e a varredura a partir da posição 5 pára no item D, e então os dois itens são trocados, como mostrado na quarta linha.
            Neste momento i e j se cruzam (i = 3 e j = 2), o que encerra o processo de partição.
          1            2          3          4          5          6

i = 1     O        R         D         E         N         A
i = 2     A         R         D         E         N         O
i = 3     A         D         R         E         N         O

            Feito este procedimento, o algoritmo agora terá de fazer a ordenação, ou seja, o refinamento final do procedimento Quicksort.
            Veja o exemplo de ordenação usando o Quicksort:

          1            2          3          4          5          6

               Chaves iniciais     O          R           D         E         N         A

                                i = 1     A          D           R         E         N         O
                                i = 2     A          D
                                i = 3                               E         R         N         O
                                i = 4                                           N         R         O
                                i = 5                                                       O         R
                                i = 6     A          D           E         N         O         R


Algoritmo do Procedimento Partição:

                        procedure Particao (Esq, Dir: Índice; var i, j : Índice);
                             var pivô, x: Item;
                        begin
                             i := Esq;
                             j := Dir;
                             pivô := A[(i+j) div 2)];
                             repeat;
                                 while pivô.Chave > A[i].Chave do i := i+1;
                                 while pivô.Chave < A[j].Chave do j :=j-1;
                                 if  i <= j then begin
                                       x := A[i]; A[i] := A[j]; A[j] :=x;
                                       i := i+1; j :=j-1;
                                 end;
                             until i>j;
                        end;

Analisando a procedure:

>> Esq e Dir são índices para definir os sub-vetores do vetor original A a ser particionado

>> i e j retornam as posições finais das partições, onde:
>     A[Esq], A[Esq+1],...,  A[j] são menores ou iguais a x
>    A[i], A[i+1],...,  A[Dir] são maiores ou iguais a x

>> O vetor é uma variável global ao procedimento Partição

Procedimento Quicksort:

                        procedure Quicksort (var A: Vetor);
                        {-- Entra aqui o procedimento partição --}
                            procedure Ordena (Esq, Dir : Índice);
                            var i, j, Índice;
                            begin
                                 partição (Esq, Dir, i, j);
                                 if Esq < j then Ordena (Esq, j);
                                 if i < Dir then Ordena (i, Dir);
                            end;
                        begin
                            Ordena (1, n);
                        end;

            Uma característica interessante do Quicksort é a sua ineficiência para arquivos já ordenados quando a escolha do pivô e inadequada. Por exemplo, a escolha sistemática dos extremos de um arquivo já ordenado leva ao seu pior caso. O pior caso pode ser evitado através de pequenas modificações no programa.
Ordenação pelo Método Selection Sort

            O algoritmo de ordenação por seleção (selection sort) é um dos métodos de ordenação mais simples que existem. Além disso, o método possui um comportamento espetacular quanto ao número de movimentos de registros, cujo tempo de execução é linear no tamanho da entrada, o que é muito difícil de ser batido por qualquer outro método. Consequentemente, este é o algoritmo a ser utilizado para arquivos com registros muito grandes.
            Este método possui alguns aspectos negativos, são eles: o fato do arquivo já estar ordenado não ajudar em nada, pois o custo continua quadrático; o algoritmo não é estável, pois ele nem sempre deixa os registros com chaves iguais na mesma posição relativa.
            Este método funciona da seguinte forma: selecione o menor item do vetor e a seguir troque-o com o item que está na primeira posição do vetor. Repita estas duas operações com os n-1 itens restantes, depois com os n-2 itens, até que reste apenas um elemento. Ou seja, o método passará sempre o menor valor do vetor para a primeira posição (ou o maior dependendo da ordem requerida), depois o de segundo menor valor para a segunda posição e assim por diante.
            Exemplo de algoritmo:
                       
                        procedure Seleção (var A: Vetor);
                        var i, j, Min : Índice;
                               x            : Item;
                        begin
                        for i := 1 to n-1 do
                             begin
                             Min i := i;
                             for j := i+1 to n do if A [j].Chave < A[Min].Chave then Min := j;
                             x := A[Min]; A[Min] := A[i]; A[i] := x;
                             end;
                        end;

Platão: Pensamento e Obras

A Vida e as Obras

 

Diversamente de Sócrates , que era filho do povo, Platão nasceu em Atenas, em 428 ou 427 a.C., de pais aristocráticos e abastados, seu pai era descendente do rei Codros.
Desde jovem, Platão manifestava seu talento artístico e poético, o que o atrapalhou na precisão e ordem de seu pensamento.
Platão era discípulo de Sócrates, donde tirou muitos dos seus pensamentos.
Em Atenas, pelo ano de 387, Platão fundava a sua célebre escola, que tomou o nome famoso de Academia.
Platão interessou-se vivamente pela política e pela filosofia política.
Platão dedicou-se inteiramente à especulação metafísica, ao ensino filosófico e à redação de suas obras, atividade que não foi interrompida a não ser pela morte.
Platão é o primeiro filósofo antigo de quem possuímos as obras completas.
A forma dos escritos platônicos é o diálogo, sendo a parte mais importante de sua atividade literária, a qual era dividida e, três grupos principais, segundo certa ordem cronológica, lógica e formal.

 

O Pensamento: A Gnosiologia

 

Como já em Sócrates, assim em Platão a filosofia tem um fim prático, moral; é a grande ciência que resolve o problema da vida. Este fim prático realiza-se, no entanto, intelectualmente, através da especulação, do conhecimento da ciência.
Para Platão, o espírito humano é peregrino neste mundo e prisioneiro na caverna do corpo. Deve transpor este mundo e libertar-se do corpo para realizar o seu fim, isto é, chegar à contemplação do inteligível.
A gnosiologia platônica tem o caráter científico, filosófico, que falta a gnosiologia socrática, ainda que as conclusões sejam idênticas. O conhecimento sensível deve ser superado por um outro conhecimento, o conhecimento conceptual. O conhecimento sensível não pode explicar o conhecimento intelectual; e ainda menos pode o conhecimento sensível explicar o dever ser, os valores de beleza, verdade e bondade, que estão efetivamente presentes no espírito humano, e se distinguem diametralmente de seus opostos, fealdade, erro e mal-posição e distinção que o sentido não pode operar por si mesmo.
A diferença essencial entre o conhecimento sensível é que o conhecimento sensível não sabe que o é, podendo cair no erro sem saber; ao passo que o conhecimento intelectual, além de ser um conhecimento verdadeiro, sabe que o é, não podendo de modo algum ser errôneo, ou seja, o conhecimento sensível sabe que as coisas estão assim, sem saber porque são, ao passo que o conecimento intelectual sabe que as coisas devem estar necessariamente assim como estão, precisamente porque é ciência, isto é, conhecimento das coisas pelas causas.
Sócrates estava convencido de que o saber intelectual transcende o saber sensível, mas julgava poder construir indutivamente o conceito da sensação; Platão, ao contrário, não admite que da sensação se possa de algum modo tirar o conceito universal, absoluto. E, exagerando a doutrina da maiêutica socrática, diz que os conceitos são a priori, inatos no espírito humano, donde têm de ser oportunamente tirados.
O mundo ideal, racional - no dizer de Platão - transcende inteiramente o mundo empírico, material, em que vivemos.  

Teoria das Idéias

 

Sócrates mostrara no conceito o verdadeiro objeto da ciência. Platão aprofunda-lhe a teoria e procura determinar a relação entre o conceito e a realidade fazendo deste problema o ponto de partida da sua filosofia.
A ciência é objetiva; ao conhecimento certo deve corresponder a realidade. Ora, de um lado, os nossos conceitos são universais, necessários, imutáveis e eternos (Sócrates), do outro, tudo no mundo é individual, contigente e transitório (Heráclito). Deve, logo, existir, além do fenomenal, um outro mundo de realidades, objetivamente dotadas dos mesmos atributos dos conceitos subjetivos que as representam. Estas realidades chamam-se Idéias. As idéias não são, pois, no sentido platônico, representações intelectuais, formas abstratas do pensamento, são realidades objetivas, modelos e arquétipos eternos de que as coisas visíveis são cópias imperfeitas e fugazes. Assim a idéia de homem é o homem abstrato perfeito e universal de que os indivíduos humanos são imitações transitórias e defeituosas.
Todas as idéias existem num mundo separado, o mundo dos inteligíveis, situado na esfera celeste. A certeza da sua existência funda-a Platão na necessidade de salvar o valor objetivo dos nossos conhecimentos e na importância de explicar os atributos do ente de Parmênides, sem, com ele, negar a existência do fieri. Tal a célebre teoria das idéias, alma de toda filosofia platônica, centro em torno do qual gravita todo o seu sistema.

 

A Metafísica

As Idéias

 

O sistema metafísico de Platão centraliza-se e culmina no mundo divino das idéias, as quais contrapõe-se à matéria obscura e incriada.
O divino platônico é representado pelo mundo das idéias e especialmente pela idéia do Bem, que está no vértice. Em geral, o mundo ideal é provado pela necessidade de justificar os valores, o dever ser, de que este nosso mundo imperfeito participa e a que aspira.
Visto serem as idéias conceitos personalizados, transferidos da ordem lógica à ontológica, terão consequentemente as características dos próprios conceitos: transcenderão a experiência, serão universais, imutáveis. Logo, a idéia do Bem, no sistema platônico, é a realidade suprema, donde dependem todas as demais idéias, e todos os valores (éticos, lógicos e estéticos) que se manifestam no mundo sensível; é o ser sem o qual não se explica o vir-a-ser. Portanto, deveria representar o verdadeiro Deus platônico. No entanto, para ser verdadeiramente tal, falta-lhe a personalidade e a atividade criadora.

 

 

As Almas

 

A alma desempenha papel de mediador entre as idéias e a matéria, à qual comunica o movimento e a vida, a ordem e a harmonia. Ele dá à alma humana um lugar e um tratamento à parte, de superioridade, em vista dos seus impelentes interesses morais e ascéticos, religiosos e místicos. Assim é que considera ele a alma humana como um ser eterno (coeterno às idéias e à matéria), de natureza espiritual, inteligível, caído no mundo material como que por uma espécie de queda original, de um mal radical. Deve portanto, a alma humana, libertar-se do corpo, como de um cárcere; esta libertação, durante a vida terrena, começa e progride mediante a filosofia, que é separação espiritual da alma do corpo, e se realiza com a morte, separando-se, então, a alma do corpo.
A faculdade principal, essencial da alma é a de conhecer o mundo ideal, transcendental: contemplação em que se realiza a natureza humana, e da qual depende totalmente a ação moral. Entretanto, sendo que a alma racional é, de fato, unida a um corpo, dotado de atividade sensitiva e vegetativa, deve existir um princípio de uma e outra. Segundo Platão, tais funções seriam desempenhadas por outras duas forças - ou “partes” da alma: a irascível (ímpeto), que residiria no peito, e a concupiscível (apetite), que residiria no abdome - assim como a alma racional residiria na cabeça. Naturalmente a alma sensitiva e a vegetativa são subordinadas à alma racional.
Logo, segundo Platão, a união da alma espiritual com o corpo é extrínseca, até violenta. A alma não encontra no corpo o seu complemento, o seu instrumento adequado. Mas a alma está no corpo como num cárcere, o intelecto é impedido pelo sentido da visão das idéias, que devem ser trabalhosamente relembradas. E diga-se o mesmo da vontade a respeito das tendências. E, apenas mediante uma disciplina ascética do corpo, que o mortifica inteiramente, e mediante a morte libertadora, que desvencilha para sempre a alma do corpo, o homem realiza a sua verdadeira natureza: a contemplação intuitiva do mundo ideal.

 

O Mundo

 

O mundo material, o cosmos platônico, resulta da síntese de dois princípios opostos: as idéias e a matéria. O mundo está entre o ser (idéia) e o não-ser (matéria), e é o devir ordenado, como o adequado conhecimento sensível está entre o saber e o não-saber, e é a opinião verdadeira. Conforme a cosmologia pampsiquista platônica, haveria, antes de tudo, uma alma do mundo e, depois, partes da alma, dependentes e inferiores, a saber, as almas dos astros, dos homens, etc.
O dualismo dos elementos constitutivos do mundo material resulta do ser e do não-ser, da ordem e da desordem, do bem e do mal, que aparecem no mundo. Da idéia - verdade, bondade - depende tudo quanto há de positivo, de racional no vir-a-ser da experiência. Da matéria - indeterminada, mutável - depende, ao contrário, tudo que há de negativo na experiência.