/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Metodo Burbuja

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
MasterKiller



Registrado: 26 Sep 2007
Mensajes: 18

MensajePublicado: 03/11/2007 8:29 am
Título: Metodo Burbuja

Bueno amigos....
tengo que hacer un programa que ingrese una cierta cantidad de numeros en un vectores y que luego los ordene por metodo burbuja....

aca esta mejor explicado lo que tengo que hacer...

Cita:

Realice el análisis de los requerimientos de la Ingeniería de Software, Análisis, Diseño, Programación y Prueba, para implementar en el lenguaje C, El Ordenamiento de N-Números por el método de la Burbuja
• Realice una función para cada uno de los puntos, que permita:
.- Ingresar un vector de tamaño N
.- Mostrar un vector de tamaño N.
.- Ordenar por método de la burbuja el vector, esta función llama a mostrar el vector, de tal manera que muestre como lo va ordenando en cada iteración.


eso tengo que hacer...
el problema... es que tengo la formula del ordenamiento burbuja...
que es...


Código:

{
for (i=1; i<TAM; i++)
   for j=0 ; j<TAM - 1; j++){
     if (lista[j] > lista[j+1])
          temp = lista[j];
         lista[j] = lista[j+1];
         lista[j+1] = temp;


pero no se como hacerlo con el vector...
ayuda porfavor...
como puedo ingresar los datos...
ayuda...

gracias...

PD: todo esto es en dev c++

ty
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 4672
Ubicación: Mexico

MensajePublicado: 03/11/2007 9:13 am
Título:

Lo primero que debes hacer para recibir ayuda es indicar el lenguaje de programacion que estas utilizando, a que te refieres con vector: a un array o a la clase vector (en el caso de C++) y mostrar cuanto llevas de tu programa.

Y si quieres orientacion en base a los programas de los demas solo tienes que utilizar el motor de busqueda de estos foros ya que en la base de datos hay varios ejemplos utilizando ese metodo de ordenacion.

Tampoco esta demas revisar la descripcion de ese metodo en Wikipedia.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
MasterKiller



Registrado: 26 Sep 2007
Mensajes: 18

MensajePublicado: 04/11/2007 6:36 pm
Título:

Ya espesifique que el lenguaje que estoy usando es el dev C++.

Lo que esta arriba es todo lo que tengo del programa...

y ya busque con el buscador... y no aparece nada que me pueda ayudar...
y en el wikipedia menos...

porfavor...
ustedes son los unicos que me pueden ayudar....

se lo agradeceria....
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 733
Ubicación: Blumenau (Br)

MensajePublicado: 05/11/2007 7:07 am
Título:

MasterKiller escribió:
Ya espesifique que el lenguaje que estoy usando es el dev C++.
Por cierto el Dev-C++ no es un lenguaje de programación, más bien es un entorno de desarrollo para C/C++.

Espero que este código en C te sirva.
Código:

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

int tam_array(void);
void mostrar_array(int u);
void burbuja(int a[], int w);

int main(void)
{
    mostrar_array(tam_array());
    puts("\n\n");
    system("PAUSE");
    return EXIT_SUCCESS;
}

int tam_array()
{
    int t;
    printf("TAMAÑO DEL ARRAY: ");
    scanf("%d", &t);
    return t;
}

void mostrar_array(int u)
{
    int i, array[u], n;
    puts("\nINGRESE LOS ELEMENTOS DEL ARRAY: ");
    for(i=0; i<u; i++)
    {
        printf(" [%d]: ", i);
        scanf("%d", &n);
        array[i]=n;
    }
    printf("\nARRAY: ");
    for(i=0; i<u; i++)
    {
        printf("%d ", array[i]);
    }
    puts("\n");
    burbuja(array, u);
    return;
}

void burbuja(int a[], int w)
{
    int i, t, j, k, aux;
    printf("ORDENACION POR BURBUJA: ");
    t=w;
    i=w-1;
    while(i>0)
    {
        k=0;
        for(j=0; j<i; j++)
            if(a[j+1] < a[j])
            {
                aux=a[j];
                a[j]=a[j+1];
                a[j+1]=aux;
                k=j;
            }
        i=k;
    }
    for(i=0; i<t; i++)
        printf("%d ", a[i]);
    return;
}


Un saludo
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 4672
Ubicación: Mexico

MensajePublicado: 05/11/2007 7:29 am
Título:

Como ya bien comento digies Dev-C++ es un entorno de desarrollo integrado o IDE y el problema con este es que permite el desarrollo de aplicaciones tanto con C como con C++.

En el caso de C aqui van dos ejemplos del uso del metodo de ordenacion BubbleSort o Burbuja para ordenar dos arrays, el primero es especifico y solo puede ordenar un tipo especifico de datos mientras que el segundo es generico (permite ordenar cualquier tipo de dato) similar a la funcion qsort de la biblioteca estandar de C.

BubbleSort (especifico):
Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NUM_REGISTROS 16

typedef struct st_registro {
   int prin; /* campo principal  */
   int sec;  /* campo secundario */
} Registro;

int main(void)
{
   Registro reg[NUM_REGISTROS];
   Registro aux;
   int i, j, intercambio;
   
   srand((unsigned) time(NULL));
   
   puts("Registros ordenados en base al campo secundario:");
   for (i = 0; i < NUM_REGISTROS; i++){
      reg[i].prin = rand() % (NUM_REGISTROS / 2);
      reg[i].sec  = i + 1;
     
      printf("%02d.%02d\n", reg[i].prin, reg[i].sec);
   }
   
   /* Ordenacion mediante el metodo burbuja (BubbleSort) */
   for (i = NUM_REGISTROS - 1; i > 0; i--){
      intercambio = 0;
     
      for (j = 0; j < i; j++)
         if (reg[j].prin > reg[j + 1].prin){
            aux = reg[j];
            reg[j] = reg[j + 1];
            reg[j + 1] = aux;
           
            intercambio = 1;
         }
     
      if (!intercambio)
         break;
   }
   
   puts("----\nRegistros ordenados en base al campo principal:");
   for (i = 0; i < NUM_REGISTROS; i++)
      printf("%02d.%02d\n", reg[i].prin, reg[i].sec);
   
   return EXIT_SUCCESS;
}



Bubblesort (general):
Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define NUM_REGISTROS 16

typedef struct st_registro {
   int prin; /* campo principal  */
   int sec;  /* campo secundario */
} Registro;

typedef int (*pfn_cmp)(void const *pa, void const *pb);

int cmp(void const *pa, void const *pb);
void bsort(void *elem, size_t num, size_t tam, pfn_cmp cmp);

int main(void)
{
   Registro reg[NUM_REGISTROS];
   int i;
   
   srand((unsigned) time(NULL));
   
   puts("Registros ordenados en base al campo secundario:");
   for (i = 0; i < NUM_REGISTROS; i++){
      reg[i].prin = rand() % (NUM_REGISTROS / 2);
      reg[i].sec  = i + 1;
     
      printf("%02d.%02d\n", reg[i].prin, reg[i].sec);
   }
   
   bsort(reg, NUM_REGISTROS, sizeof reg[0], cmp);
   
   puts("----\nRegistros ordenados en base al campo principal:");
   for (i = 0; i < NUM_REGISTROS; i++)
      printf("%02d.%02d\n", reg[i].prin, reg[i].sec);
   
   return EXIT_SUCCESS;
}

/*
** Funcion de soporte que compara los campos principales de dos registros
** y cuyo valor de retorno es positivo, cero o negativo, si el campo principal
** del primer registro (a) es mayor, igual o menor que el campo principal del
** segundo registro (b), respectivamente.
*/
int cmp(void const *pa, void const *pb)
{
   Registro const *p = pa;
   Registro const *q = pb;
   
   return (p->prin > q->prin) - (p->prin < q->prin);
}

/*
** Funcion que utiliza el algoritmo de ordenacion "Burbuja" (BubbleSort)
** para ordenar una lista de elementos sin importar su tipo, de forma similar
** a la funcion qsort de la biblioteca estandar de C.
*/
void bsort(void *elem, size_t num, size_t tam, pfn_cmp cmp)
{
   char *base = elem;
   void *aux;
   size_t i;
   size_t j;
   size_t num_bytes;
   int intercambio;
   
   if (base == NULL || num < 2 || tam == 0)
      return;
   if ((aux = malloc(tam)) == NULL)
      return;
   
   /* Numero total de bytes utilizados por el array a ordenar */
   num_bytes = num * tam;
   
   /* Ordenar los ultimos num-1 elementos */
   for (i = num_bytes - tam; i > 0; i -= tam){
      intercambio = 0;
     
      for (j = 0; j < i; j += tam)
         if (cmp(base + j, base + j + tam) > 0){
            memmove(aux, base + j, tam);
            memmove(base + j, base + j + tam, tam);
            memmove(base + j + tam, aux, tam);
           
            intercambio = 1;
         }
     
      if (!intercambio)
         break;
   }
   
   free(aux);
}


Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
MasterKiller



Registrado: 26 Sep 2007
Mensajes: 18

MensajePublicado: 05/11/2007 6:09 pm
Título:

Gracias amigos por la ayuda...

me sirvio arto!....


ty
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com