Ordenar um lista estática sequencial básica (bubblesort)

Publicado por Rafael Henrique da Silva Correia 04/05/2008

[ Hits: 15.832 ]

Homepage: http://abraseucodigo.com.br

Download lista_bubblesort.c




Ordenando... Executem e contemplem!!!

  



Esconder código-fonte

#include <stdio.h>
#include <stdlib.h>

int main(){
    int i, j, lista[6], aux;

    for( i=0; i<=5; i++ ){
        printf("Digite o %d elemento da lista: ", i+1);
        scanf("%d",&lista[i]);
    }

    printf("\nlista digitada: ");

    for( i=0; i<=5; i++ ){
        printf("%d ",lista[i]);
    }

    printf("\n");

    for( j=0; j<=5; j++ ){
        for( i=0; i<=5; i++ ){
            if( lista[i] > lista[i+1] ){
                aux = lista[i];
                lista[i] = lista[i+1];
                lista[i+1]=aux;
            }
        }
    }

    printf("lista ordenada: ");

    for( i=0; i<=5; i++ ){
        printf("%d ",lista[i]);
    }

    printf("\n");
    return 0;
}

Scripts recomendados

Aplicção em C++

Arvores Red Black

Script para trocar o papel de parede do fluxbox em GTK

Biblioteca dos.h

Gerador de number list v2


  

Comentários
[1] Comentário enviado por albertguedes em 04/05/2008 - 22:25h

Como diz Ronaldo Ésper: "Báaasico". hahaha

[2] Comentário enviado por rafaelhenrique em 04/05/2008 - 23:52h

Eu chamaria de didático não de básico :)

[3] Comentário enviado por nukelinux em 07/05/2008 - 14:01h

há um erro no código...

os loops 'for' aninhados não funcionam corretamente
para que isso ocorra, basta remover o sinal de igual do controle interno de ambas as estruturas, ou seja, troque isto:

for(j=0;j<=5;j++){
for(i=0;0<=5;i++){

por isto

for(j=0;j<5;j++){
for(i=0;0<5;i++){

no mais, ótimo trabalho!



[4] Comentário enviado por elgio em 07/05/2008 - 14:48h

_

[5] Comentário enviado por elgio em 07/05/2008 - 14:50h

Buble sort é lento e sua complexidade é sempre (n-1)*(n-1), mesmo para um vetor já ordenado. Tem uma otimização fácil para o Buble sort que faz com que a complexidade seja NO MÁXIMO (n-1)*(n-1) para um vertor totalmente desordenado, mas deixa em apenas n-1 para um já ordenado. Coloco como função (pois é MUITO mais prático):

/* Ignore os TRACOS. Eh uma tentativa de manter a identacao aqui no VOL */

int ordenaBSOtimo (int v[], int t)
{
_ _ char troca;
_ _ int i, temp;

_ _ troca = 1;
_ _ while (troca){
_ _ _ _ troca = 0;
_ _ _ _ for (i=1; i < t; i++){
_ _ _ _ _ _ if (v[i-1] > v[i]){
_ _ _ _ _ _ _ _ troca = 1;
_ _ _ _ _ _ _ _ temp = v[i-1];
_ _ _ _ _ _ _ _ v[i-1] = v[i];
_ _ _ _ _ _ _ _ v[i] = temp;
_ _ _ _ _ _ }
_ _ _ _ }
_ _ }
_ _ return(i);
}

[6] Comentário enviado por rafaelhenrique em 07/05/2008 - 18:33h

Sobre as críticas:
"Buble sort é lento e sua complexidade é sempre (n-1)*(n-1)"

Sim elgio, concordo plenamente, até mesmo Knuth (pai dos algoritmos de Estruturas de Dados) deve concordar com isso, porém apenas coloquei este algoritmo ineficiente, para demonstrar as pessoas iniciantes como fazer uma ordenação básica, com certeza eu usaria o Quicksort se fosse para prática.

"Coloco como função (pois é MUITO mais prático)"

Concordo que uma função pode ser mais prático, mas torno a dizer, queroa ajudar os iniciantes, muitos não sabem usar funções ainda.

Obrigado pelas críticas

[7] Comentário enviado por rafaelhenrique em 07/05/2008 - 18:34h

Obrigado pela contribuição cafe racer, não chega a ser um erro mas sua observação torna o código mais eficiente.

Vlwsss

[8] Comentário enviado por elgio em 07/05/2008 - 18:37h

Claro que é um ERRO!
Como fizeste no ultimo laco vai trocar ou não pelo elemento [6] que não existe!

lista[i] = lista[i+1];

QUando i for EXATO 5, vai comparar o [5] ULTIMO com [6] INEXISTENTE (mas tá lá na memória!! ou seja, vai ordenar LIXO)

[9] Comentário enviado por rafaelhenrique em 07/05/2008 - 20:34h

Sim é um erro de lógica mas visualmente é imperceptível (quando se roda), ainda mais levando em consideração a complexidade do código que é 0 complexo, por isso falei que não é bem um erro, mas você está certo elgio


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts