Bozosort

Origem: Desciclopédia, a enciclopédia livre de conteúdo.

Eu utilizei ele para por em ordem alfabética minha lista de piadas sem graça
Bozo sobre BozoSort

Se eu pudesse eu ordenarra MIL
Jeremias sobre seu algoritmo de ordenação favorito

Ora puix, é o jeito maix rápido di ordenaire uma sequencia!
Pedro Alvares Cabral sobre BozoSort

Ham? O Bozo tá com Sorte? Ahh, que bom, mais um sortudo assistindo ao programa!
Carla Perez sobre BozoSort

Não é mais eficiente que minha maneira de ordenar: Eu apenas olho para os dados e eles se ordenam sozinhos
Chuck Norris comparando ChuckSort com BozoSort

Tabela de conteúdo

[editar] O BozoSort

Com os avanços da Programação orientada ao Atrito, tornando-se este um paradigma conceituado mundialmente como o mais eficiente dos dias de hoje - aonde precisamos de eficiência e assertividade, surgiu então um algoritmo de ordenação que segue à risca o paradigma. Este paradigma, o BogoSort, BozoSort, BoboSort, ou ainda TocomSort(de acordo com os espertalhões da Wikipedia, e isso é sério, veja ligação externa).

Bozo comemorando sua invenção.
Bozo comemorando sua invenção.

De acordo com Jargon File mignon, a eficiência do algoritmo se baseia na idéia de um eficiente método utilizado por jogadores de truco para ordenarem seus baralhos. A técnica milenar tem por idéia você embaralhar o baralho, e de tempo em tempo conferir se as cartas estão em ordem. O processo se repete até que finalmente o baralho esteja ordenado.

Além de organizar eficientemente as cartas, percorrendo no máximo 1,99 * pow(10,2019834712093847109283471029384721093847102983740192837409128347091823740912837409) vezes todo o baralho, o método ajuda você a saber se poderá acertar na mega-sena pois se você conseguir ordenar 40 cartas em menos de cinco milênios com o método, jogue na mega-sena: você está com sorte!!

[editar] BozoSort e Java

Atualmente a Sun MicroPOGSystems, empresa responsabilizada que criou o Java, é uma das maiores difusoras do algoritmo. Um exemplo disso é que ela possui internamente, na API do Java, todas as ordenações feitas através do algoritmo.

Quando carregamos um programa em Java, como aqueles que levam 18 horas dias meses para carregar, percebemos que internamente a JVM está ordenando sabe-se lá o que.

Recentemente a Sun publicou o código fonte do algoritmo de ordenação implementado em Java, para que outros idiotas programadores Java pudessem incrementar eficiência em seus programas. O código segue abaixo:

class BozoSortAlgorithm extends SortAlgorithm {

    void sort(int a[]) throws Exception {
    
	boolean sorted = false;
    
	while (!sorted) {
	    int index1 = Randomize(a.length);
	    int index2 = Randomize(a.length);  
     
	    int temp = a[index2];
	    a[index2] = a[index1];
	    a[index1] = temp;
	    compex(index1, index2);
	    pause();
	    // Is a[] sorted?
	    sorted = true;
	    for (int i = 1; i < a.length; i++)  {
		if (a[i-1] > a[i]) {
		    compex(i, i-1);
		    pause();
		    sorted = false;
		    break;
		}  // end if
	    }  // end for
	} // end while
    }  // end sort 
    
    private int Randomize( int range )  {
	
	double  rawResult;
  
	rawResult = Math.random();
	return (int) (rawResult * range);
    }
  
}  // end BozoSortAlgorithm

[editar] Outras Implementações

O BozoSort foi também implementado em uma série de outras linguagens.

[editar] Python

Veja como Python possui mecanismos muito piores que os do Java, que tornam o código do BozoSort em Python muito maior e praticamente ilegível:

from random import shuffle

def bogosort(seq):
    como_deve_ficar = sorted(seq)
    while seq != como_deve_ficar:
        shuffle(seq)

[editar] C++

Como todos sabemos que C++ é bem mais complicado que Java, o código fica assim:

#include <algorithm>
#include <vector>

template<class T>
void bogosort(std::vector<T>& array)
{
    while (! is_sorted(array))
        std::random_shuffle(array.begin(), array.end());
}

template<class T>
bool is_sorted(const std::vector<T>& array)
{
    for (typename std::vector<T>::size_type i = 1; i < array.size(); ++i)
        if (array[i] < array[i-1]) return false;
    return true;
}

[editar] Pascal

Veja agora em Pascal, linguagem utilizada no Delphi, aquela que todo mundo diz que é muito simples de entender:

program bogosort (input, output);
const max=10;   {*Tamanho do vetor *}
type vetor=array[1..max] of integer;
var lista, lista1: vetor;
    i: integer;
    j: boolean;
    pos: integer;

         function teste(var proto: vetor): boolean;     {*Verifica se o vetor NÃO está ordenado.*}
         var i: integer;
         begin
                 teste:=true;
                 for i:=2 to max do
                         if (proto[i]<proto[i-1]) then
                                 break;
                 if (i=max) and (proto[max]>=proto[max-1]) then
                         teste:=false;
         end;

begin
         randomize;    {*Inicializa o gerador de numeros aleatórios *}
         writeln('Escreva abaixo os ', max,' elementos do vetor:');
         for i:=1 to max do
         begin
                 read(lista[i]);  
                 lista1[i]:=lista[i];
         end;
         for i:=1 to max do           {*Escreve o vetor recebido *}
                 write(lista1[i],' ');
         writeln;
         while teste(lista1) do    {*Enquanto o vetor nao esta ordenado...*}
         begin
                 j:=true;
                 for i:=1 to max do     {*Inicializa o vetor auxiliar *}
                         lista1[i]:=0;
                 for i:=1 to max do   {* Este loop preenche aleatoriamente o vetor auxiliar *}
                 begin
                         j:=true;
                         while j do {* Este while garante que nenhum dado será sobrescrito *}
                         begin
                                 pos:= random(max)+1;    {* Gera posição aleatória *}
                                 if lista1[pos]=0 then     {*Garante que a posição não está ocupada *}
                                 begin
                                         lista1[pos]:=lista[i];
                                         j:=false;
                                 end;
                         end;
                 end;
                 for i:=1 to max do     {* Imprime na tela a tentativa *}       
                         write(lista1[i],' ');
                 writeln;               
         end;
         write('A LISTA FOI ORDENADA!');
end.

[editar] Perl

Veja em Perl, que é uma linguagem que veio para trazer clareza à programação:

use List::Util qw(shuffle);
sub bogosort{
my @a=@_;
my @sorted=sort @a;
while("@a" ne "@sorted"){
@a=shuffle(@a);
}
return @a;
}

[editar] Portugol

funcao ordena(lista)

enquanto nao esta_ordenado(lista) faca
  ordena_aleatoriamente(lista)
fimenquanto
Ferramentas pessoais
(F)Utilidades