#include <iostream>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#include <ctime>
#define MAX 100
#include <string>
//Prototipos.
void burbuja(int a[],int n);
void burbujam(int a[],int n);
void mezc(int a[],int b[],int c[],int m,int n);
void insercion(int a[],int n);
void seleccion(int a[],int n);
void shell(int a[],int n);
int numelem();
void tipocap(int a[],int n);
void captura(int a[],int n);
void capinsercion(int a[],int n);
void caleat(int a[],int n);
void ver(int a[],int n);
char menu();
int mcap();
int main(){
int a[MAX],b[MAX],c[MAX],n,m,k;
int salir=0;
do {
switch(menu()){
case 'a':
case 'A':
cout<<"BURBUJA SIMPLE";
cout<<"\n";
n=numelem();
tipocap(a,n);
printf("Su Arreglo:\n");
ver(a,n);
printf("\n\nPresione Cualquier Tecla, ");
printf("Para Comenzar Ordenamiento...");
burbuja(a,n);
printf("Arreglo ordenado:\n");
ver(a,n);
break;
case 'b':
case 'B':
cout<<"BURBUJA MEJORADO";
cout<<"\n";
n=numelem();
tipocap(a,n);
printf("Su Arreglo:\n");
ver(a,n);
burbujam(a,n);
printf("\nArreglo ordenado:\n");
ver(a,n);
break;
case 'c':
case 'C':
n=numelem();
capinsercion(a,n);
printf("Arreglo ordenado:\n");
ver(a,n);
break;
case 'd':
case 'D':
n=numelem();
tipocap(a,n);
printf("Su Arreglo:\n");
ver(a,n);
printf("\n\nPresione Cualquier Tecla, ");
printf("Para Comenzar El Ordenamiento...");
seleccion(a,n);
printf("Arreglo ordenado:\n");
ver(a,n);
break;
case 'e':
case 'E':
n=numelem();
tipocap(a,n);
printf("Su Arreglo:\n");
ver(a,n);
printf("\n\nPresione Cualquier Tecla, ");
printf("Para Comenzar El Ordenamiento...");
shell(a,n);
printf("Arreglo ordenado:\n");
ver(a,n);
break;
case 'f':
case 'F':
cout<<"METODO POR MEZCLA\n";
printf("Arreglo N_1\n");
m=numelem();
tipocap(a,m);
printf("Arreglo N_1:\n");
ver(a,m);
printf("Ordenando Arreglo N§1\n");
seleccion(a,m);
ver(a,m);
printf("\nArreglo N_2\n");
n=numelem();
tipocap(b,n);
printf("\nArreglo N_2:\n");
ver(b,n);
printf("\nOrdenando Arreglo N§2\n");
seleccion(b,n);
ver(b,n);
printf("\nMezclando...");
mezc(a,b,c,m,n);
printf("\nArreglos Mezclados.");
printf("\nOrdenado por el Metodo de Mezcla.\n");
k=m+n;
ver(c,k);
break;
case 's':
case 'S':
salir=1;
break;
default:
printf("Opcion No Valida.");
break;
}
}while(salir!=1);
}
//Funciones de Prototipos.
void tipocap(int a[],int n){
switch(mcap()){
case 1:
captura(a,n);
break;
case 2:
caleat(a,n);
break;
}
}
void capinsercion(int a[],int n){
int i;
for(i=0;i<n;i++){
a[i]=20000;
}
for(i=0; i<n; i++){
printf("Elemento %d: ", i+1);
scanf("%d",& a[i]);
insercion(a,n);
}
}
char menu(){
char opc;
printf("\nMenu de Metodos de Ordenamiento.\n\n");
printf("a) Burbuja Simple.\nb) Burbuja Mejorada.\n");
printf("c) Insercion.\nd) Seleccion.\ne) Shell.\n");
printf("f) Mezcla.\ns) Salir.\n\nMetodo a Utilizar: ");
std::cout << "Digite la opcion\n";
std::cin>>opc;
return(opc);
}
int mcap(){
int cap;
printf("Modo de Captura.\n\n");
printf("1) Manual.\n2) Aleatoria.\n");
printf("\nCaptura de forma: ");
std::cin>>cap;
return(cap);
}
int numelem(){
long double elems;
printf("Numero de elementos: ");
elems=10;
return(elems);
}
void captura(int a[],int n){
int i;
for(i=0;i<n;i++){
printf("%d: ",i+1);
//scanf("%d", &a[i]);
std::cin>>a[i];
}
}
void caleat(int a[], int n){
int i;
for(i=0;i<n;i++){
a[i]=(rand()%100);
}
}
void ver(int a[], int n){
int i;
for(i=0;i<n;i++){
printf(" %d: %d\t",i+1, a[i]);
}
;
}
void burbuja(int a[],int n){
int i,j,k=0,aux;
printf("\n");
for(i=0;i<=n;i++){
printf("\nPasada N #%d)\t",k);
k++;
for(j=0;j<n-i;j++){
if(a[j]>a[j+1]){
aux=a[j];
a[j]=a[j+1];
a[j+1]=aux;
}
printf("\n");
ver(a,n);
}
}
printf("\n");
}
void burbujam(int a[],int n){
int i,j=0,band=1,aux;
while(j<n && band==1){
band=0;
for(i=0;i<n;i++){
if(a[i]>a[i+1]){
aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
band=1;
}
}
printf("\nPasada N§%d\n",j);
ver(a,n);
j++;
}
}
void insercion(int a[],int n){
int i,j,aux;
for(i=1; i<n; i++){
j=i;
aux=a[i];
while(j>0 && aux<a[j-1]){
a[j]=a[j-1];
j--;
}
a[j]=aux;
}
printf("Los Elementos son:\n ");
for(j=0; j<n; j++)
printf("%d\n ",a[j]);
}
void seleccion(int a[],int n){
int i=0,j=0,x=0,im,aux;
for(i=0;i<n-1;i++){
x++;
im=i;
for(j=i+1;j<n;j++){
if(a[j]<a[im]){
im=j;
}
}
aux=a[i];
a[i]=a[im];
a[im]=aux;
printf("Pasada N§%d:\n",x);
ver(a,n);
}
}
void shell(int a[],int n){
int inter=(n/2),x=0,i=0,j=0,k=0,aux;
while(inter>0){
for(i=inter;i<n;i++){
x++;
j=i-inter;
while(j>=0){
k=j+inter;
if(a[j]<=a[k]){
j--;
}
else{
aux=a[j];
a[j]=a[k];
a[k]=aux;
j=j-inter;
}
}
printf("Pasada N§%d:\n",x);
ver(a,n);
}
inter=inter/2;
}
}
void mezc(int x[],int y[],int z[],int m,int n){
int i=0,j=0,k=0;
while((i<=m)&&(j<n)){
if(x[i]<=y[j]){
z[k]=x[i];
i++;
}
else{
z[k]=y[j];
j++;
}
k++;
}
if(i!=m){
do{
z[k]=x[i];
k++;
i++;
} while(i<=m);
}
else {
do{
z[k]=y[j];
k++;
j++;
} while(j<=n);
}
}
COMPILADOR Replit.it
No hay comentarios:
Publicar un comentario