Foros del Web » Programación para mayores de 30 ;) » C/C++ »

programa metodo de burbujas

Estas en el tema de programa metodo de burbujas en el foro de C/C++ en Foros del Web. Hola buen dia, me dejaron hacer el programa de metodo de burbujas lo hice y corrio bien, pero luego nos dijo el profe que en ...
  #1 (permalink)  
Antiguo 02/03/2011, 23:32
 
Fecha de Ingreso: febrero-2011
Mensajes: 4
Antigüedad: 13 años, 2 meses
Puntos: 0
programa metodo de burbujas

Hola buen dia, me dejaron hacer el programa de metodo de burbujas lo hice y corrio bien, pero luego nos dijo el profe que en vez de que haga la operacion y se salga se retorne al menu principal, pero no puedo hacer q regrese ya cambie la condicion del while por (opcion!=0) y aun asi no funciona, alguin pudiera ayudarme a resolver este problema???
aca les dejo el codigo que hice para ver si me pueden corregir ese problema gracias


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

int * reservaMemoriaVector(int n);
void llenaArreglo(int arreglo[], int n);
void imprimeArreglo(int arreglo[], int n);
void intercambia(int *valor1, int *valor2);
void burbujaMenor(int arreglo[], int n);
void burbujaMayor(int arreglo[], int n);
void burbujaMejorado(int arreglo[], int n);
void insercion(int arreglo[], int n);
void seleccion(int arreglo[], int n);
void mezcla(int arreglo[], int izquierda, int derecha);
void shellSort(int arreglo[], int n, int paso);
void quickSort(int arreglo[], int primero, int ultimo);

int main(void)
{
int *arreglo, n, opcion;
system("Cls");
printf("Total de elementos a ordenar: ");
scanf("%d", &n);
arreglo = reservaMemoriaVector(n);
llenaArreglo(arreglo, n);
printf("\nArreglo original\n\n");
imprimeArreglo(arreglo, n);
system("Pause");
do
{
system("Cls");
printf("\nMétodo de ordenamiento a utilizar\n\n");
printf("1.- Burbuja menor\n2.- Burbuja mayor\n3.- Burbuja mejorado\n");
printf("4.- Inserción\n5.- Selección\n6.- Mezcla\n");
printf("7.- Shell Sort\n8.- Quick Sort\n");
printf("Opción: ");
scanf("%d", &opcion);
} while (opcion < 1 || opcion > 8);
switch (opcion)
{
case 1:
burbujaMenor(arreglo, n);
break;
case 2:
burbujaMayor(arreglo, n);
break;
case 3:
burbujaMejorado(arreglo, n);
break;
case 4:
insercion(arreglo, n);
break;
case 5:
seleccion(arreglo, n);
break;
case 6:
mezcla(arreglo, 0, n - 1);
break;
case 7:
shellSort(arreglo, n, 2);
break;
case 8:
quickSort(arreglo, 0, n - 1);
break;
default:
printf("Opción incorrecta");
break;
}
printf("\nArreglo ordenado\n\n");
imprimeArreglo(arreglo, n);
system("Pause");
return 0;
}

int * reservaMemoriaVector(int n)
{
int bytes = sizeof(int) * n, i = -1;
int *vector = (int *)malloc(bytes);
for (i = 0; i < n; i++)
vector[i] = 0;
return vector;
}

void llenaArreglo(int arreglo[], int n)
{
int i;
printf("\nIntroduce los %d elementos del arreglo\n\n", n);
for (i = 0; i < n; i++)
{
printf("Arreglo[%d] = ", i);
scanf("%d", &arreglo[i]);
}
}

void imprimeArreglo(int arreglo[], int n)
{
int i;
printf("\nElementos almacenados en el arreglo\n\n");
for (i = 0; i < n; i++)
{
printf("Arreglo[%d] = %d\n", i, arreglo[i]);
}
}

void intercambia(int *valor1, int *valor2)
{
if (valor1 != valor2)
{
int aux = *valor1;
*valor1 = *valor2;
*valor2 = aux;
}
}

void burbujaMenor(int arreglo[], int n)
{
register int i, j;
for (i = 1; i < n; i++)
{
for (j = n - 1; j >= i; j--)
{
if (arreglo[j - 1] > arreglo[j])
{
intercambia(&arreglo[j - 1], &arreglo[j]);
}
}
}
}

void burbujaMayor(int arreglo[], int n)
{
register int i, j;
for (i = n - 2; i >= 0; i--)
{
for (j = 0; j <= i; j++)
{
if (arreglo[j] > arreglo[j + 1])
{
intercambia(&arreglo[j], &arreglo[j + 1]);
}
}
}
}

void burbujaMejorado(int arreglo[], int n)
{
register int i, j, band;
i = 0;
band = 0;
while (i < n - 1 && !band)
{
band = 1;
for (j = 0; j < n - 1; j++)
{
if (arreglo[j] > arreglo[j + 1])
{
intercambia(&arreglo[j], &arreglo[j + 1]);
band = 0;
}
}
i++;
}
}

void insercion(int arreglo[], int n)
{
register int i, j, aux;
for (i = 1; i < n; i++)
{
aux = arreglo[i];
j = i - 1;
while (j >= 0 && aux < arreglo[j])
{
arreglo[j + 1] = arreglo[j];
j--;
}
arreglo[j + 1] = aux;
}
}

void seleccion(int arreglo[], int n)
{
register int i, j, menor;
for(i = 0; i < n - 1; i++)
{
menor = i;
for(j = i + 1; j < n; j++)
{
if (arreglo[j] < arreglo[menor])
{
menor = j;
}
}
if (i != menor)
{
intercambia(&arreglo[menor], &arreglo[i]);
}
}
}

void mezcla(int arreglo[], int izquierda, int derecha)
{
register int i, j, k, medio;
static int *aux;
aux = (int *)malloc(sizeof(int) * (derecha + 1));
if (derecha > izquierda)
{
medio = (derecha + izquierda) / 2;
mezcla(arreglo, izquierda, medio);
mezcla(arreglo, medio + 1, derecha);
for (i = medio + 1; i > izquierda; i--)
{
aux[i - 1] = arreglo[i - 1];
}
for (j = medio; j < derecha; j++)
{
aux[derecha + medio - j] = arreglo[j + 1];
}
for (k = izquierda; k <= derecha; k++)
{
arreglo[k] = (aux[i] < aux[j])?aux[i++]:aux[j--];
}
}
}

void shellSort(int arreglo[], int n, int paso)
{
register int i, j, incremento, aux;
incremento = n / paso;
while (incremento > 0)
{
for (i = incremento; i < n; i++)
{
j = i;
aux = arreglo[i];
while (j >= incremento && arreglo[j - incremento] > aux)
{
arreglo[j] = arreglo[j - incremento];
j = j - incremento;
}
arreglo[j] = aux;
}
incremento /= paso;
}
}

void quickSort(int arreglo[], int primero, int ultimo)
{
register int i, j;
int pivote;
i = primero;
j = ultimo;
pivote = arreglo[(primero + ultimo) / 2];
do
{
while(arreglo[i] < pivote)
{
i++;
}
while(arreglo[j] > pivote)
{
j--;
}
if (i <= j)
{
intercambia(&arreglo[i], &arreglo[j]);
i++;
j--;
}
} while (i <= j);
if(primero < j)
{
quickSort(arreglo, primero, j);
}
if(ultimo > i)
{
quickSort(arreglo, i, ultimo);
}
}
  #2 (permalink)  
Antiguo 03/03/2011, 03:27
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: programa metodo de burbujas

El switch-case debería estar en un while para que se repita hasta que el usuario no de a la opción de salir.

Etiquetas: metodo, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:12.