Mais um "Post" de "C" para vocêis leitores iniciantes desta linguagem,Cof Cof eu também sou iniciante :)
só que estou compartilhando o que estou pesquisando e aprendendo,Bem hoje vamos fazer algo diferente
vamos pegar dados e organizar a partir de um método de "Sort" aqui vamos usar o método bolha não é um
dos melhores mas para coisas pequenas faz bem o trabalho...
qualquer dúvida leia aqui antes para entender o seu funcionamento
http://pt.wikipedia.org/wiki/Categoria:Algoritmos_de_ordena%C3%A7%C3%A3o
Bem em outras linguagens como RUBY,PHP,Python e Perl, tem funções de "sort" pré definidas
como por exemplo quando você chama função "sort" o Perl usa uma função interna usando método
de ordenação "Merge" ou seja por mistura e assim vai e acaba dando "return" do array organizado
Estes métodos são fáceis de implementar se a linguagem tem estás funções ou libs que o faça,Aqui
vamos pegar linguagem C nível de dificuldade é maior por termos que intender o algoritmo e fazer a roda
Bem vou postar um código todo comentado para ajudar você leitor
// Autor: Antonio Cooler
// License BSD
// Exemplo de como usar o método bolha para organizar informações
// http://BotecoUnix.com.br
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define w printf
#define MAX_BUF 256
//lê as funções do fim do código antes de iniciar
void bubble(void *p, int width, int N,int(*fptr)(const void *, const void *));
int compara_letras(const void *m, const void *n);
int compara_numeros(const void *m, const void *n);
int main() {
// Declaramos nossas vars como listas e para explicar o uso da função bubble
// já add os dados
long lista[]={4,2,1,5,3,8,10,9,0,45};
char nomes[6][20] = {"Madruga","Arara","Zebra","Elefante","Babaca","Gato"};
int i;
for(i=0; i<=9; i++) w("%d\n",lista[i]);
for(i=0; i<=5; i++) w("%s\n",nomes[i]);
w("--------------\nagora dando sort nas listas\n");
//Chama a função do nosso metodo de sort "bubble" no seguinte padrão
// nome_func(array, tamanho, elementos Func_a_ser_usada);
bubble(lista, 4, 10, compara_numeros);
bubble(nomes, 20, 6, compara_letras);
for(i=0; i<=9; i++) w("%d\n",lista[i]);
for(i=0; i<=5; i++) w("%s\n",nomes[i]);
return 0;
}
//função bolha POG pura huHAUhUAHah
//definimos no apontador "p" nome do "array",na var "width" definimos tamanho e na var
//"N" definimos quantidade e no apontador "*fptr" definimos a função secundaria ou seja
// se é para comparar string ou long...
void bubble(void *p, int width, int N, int(*fptr)(const void *, const void *)) {
int i, j, k;
//unsigned força para negativo
unsigned char buf[MAX_BUF];
unsigned char *bp = p;
//aqui você não vai ter nenhum problema se você entendeu o algoritmo
for (i = N-1; i >= 0; i--) {
for (j = 1; j <= i; j++) {
k = fptr((void *)(bp + width*(j-1)), (void *)(bp + j*width));
if (k > 0) {
memcpy(buf, bp + width*(j-1), width);
memcpy(bp + width*(j-1), bp + j*width , width);
memcpy(bp + j*width, buf, width);
}
}
}
}
//comparando letras graças "strcmp" função da lib "string.h"
int compara_letras(const void *m, const void *n) {
char *m1 = (char *)m;
char *n1 = (char *)n;
return (strcmp(m1,n1));
}
//comparando numeros
int compara_numeros(const void *m, const void *n) {
long *m1, *n1;
m1 = (long *)m;
n1 = (long *)n;
return (*m1 > *n1);
}
neste link tem boas explicações em outros casos http://pt.wikipedia.org/wiki/Bubble_sort
bem com este "post" você já tem uma função legal para usar nos seus programas
isso é apenas uma introdução a métodos de ordenação cabe a você estudar outros
métodos...
O método da bolha foi o primeiro algoritmo que eu aprendi para organizar dados... eu nunca vou me cansar de ver exemplos. hehe =]
Tem vários métodos... bubble, radix, merge... eu prefiro o quicksort. Tive que implementar o algoritmo em C no ano passado.
Recomendo o quicksort. Já vem na biblioteca do C. Pesquisem qsort().
Lembrando que esses métodos não ordenam somente strings. Isso são algoritmos, que podem ser aplicados a qualquer tipo de dados. Na verdade, o C só trabalha com números. Mesmo quando o que se ordena é texto, o C enxerga valores da tabela ASCII.