#include <stdio.h>
int Cantidad, opcion, i, Vector[100], j, k, Aux, intb, l, Mayor, Posmayor, Volver, Central;
/*SUBRUTINA DE QUICK SORT*/
void partir(int primero,int ultimo)
{i=primero;
j=ultimo;
Central= Vector[(primero+ultimo)/2];
while (i<=j)
{while (Vector[i]<Central)
{i=i+1;}
while (Vector[j]>Central)
{j=j-1;}
if (i<=j)
{printf("\n\nCambiando... Vector[%d]=%d por Vector[%d]=%d\n",j,Vector[j],i,Vector[i]);
Aux=Vector[i];
Vector[i]=Vector[j];
Vector[j]=Aux;
for(k=1;k<=Cantidad;k++)
{printf("\t%d",Vector[k]);}
i=i+1;
j=j-1;
}
}
if(primero<j)
{partir(primero,j);}
if(i<ultimo)
{partir(i,ultimo);}
}
/*METODO QUICK SORT*/
void Quick_Sort()
{printf("\n\n\tCuantos numeros seran introducidos: ");
scanf("%d",&Cantidad);
printf("\n");
for(i=1;i<=Cantidad;i++)
{printf("\tVector[%d]=",i);
scanf("%d",&Vector[i]);
}
partir(1,Cantidad);
printf("\n\n\t\tVECTOR ORDENADO\n");
for(i=1;i<=Cantidad;i++)
{printf("\t%d",Vector[i]);}
}
/*METODO DE SHELL*/
void Shell()
{printf("\n\n\tCuantos numeros seran introducidos: ");
scanf("%d",&Cantidad);
printf("\n");
for(i=1;i<=Cantidad;i++)
{printf("\tVector[%d]=",i);
scanf("%d",&Vector[i]);
}
intb = Cantidad / 2;
while(intb>0)
{for(i=intb+1;i<=Cantidad;i++)
{j = i - intb;
while(j>0)
{k = j + intb;
if(Vector[j]<Vector[k])
{j=0;}
else
{printf("\n\n\tCambiando... Vector[%d]=%d por Vector[%d]=%d\n",j,Vector[j],k,Vector[k]);
Aux = Vector[j];
Vector[j] = Vector[k];
Vector[k] = Aux;
for(l=1;l<=Cantidad;l++)
{printf("\t%d",Vector[l]);}
}
j = j - intb;
}
}
intb = intb / 2;
}
printf("\n\n\t\tVECTOR ORDENADO\n");
for(i=1;i<=Cantidad;i++)
{printf("\t%d",Vector[i]);}
}
/*METODO DE SELECCION*/
void Seleccion()
{printf("\n\n\tCuantos numeros seran introducidos: ");
scanf("%d",&Cantidad);
printf("\n");
for(i=1;i<=Cantidad;i++)
{printf("\tVector[%d]=",i);
scanf("%d",&Vector[i]);
}
for(i=1;i<=Cantidad-1;i++)
{Mayor=Vector[i];
Posmayor=i;
for(j=i+1;j<=Cantidad;j++)
{if(Vector[j]<Mayor)
{Mayor=Vector[j];
Posmayor=j;
}
}
printf("\n\n\tCambiando... Vector[%d]=%d por Vector[%d]=%d\n",i,Vector[i],Posmayor,Vector[Posmayor]);
Aux=Vector[i];
Vector[i]=Vector[Posmayor];
Vector[Posmayor]=Aux;
for(l=1;l<=Cantidad;l++)
{printf("\t%d",Vector[l]);}
}
printf("\n\n\t\tVECTOR ORDENADO\n");
for(i=1;i<=Cantidad;i++)
{printf("\t%d",Vector[i]);}
}
/*METODO DE BURBUJA*/
void Burbuja()
{printf("\n\n\tCuantos numeros seran introducidos: ");
scanf("%d",&Cantidad);
printf("\n");
for(i=1;i<=Cantidad;i++)
{printf("\tVector[%d]=",i);
scanf("%d",&Vector[i]);
}
for(i=1;i<=Cantidad-1;i++)
{for(j=1;j<=Cantidad-1;j++)
{if(Vector[j+1]<Vector[j])
{printf("\n\n\tCambiando... Vector[%d]=%d por Vector[%d]=%d\n",j+1,Vector[j+1],j,Vector[j]);
Aux=Vector[j+1];
Vector[j+1]=Vector[j];
Vector[j]=Aux;
for(k=1;k<=Cantidad;k++)
{printf("\t%d",Vector[k]);}
}
}
}
printf("\n\n\t\tVECTOR ORDENADO\n");
for(i=1;i<=Cantidad;i++)
{printf("\t%d",Vector[i]);}
}
/*PROGRAMA PRINCIPAL*/
void main()
{do
{printf("\n\n\n\n\n\n\t\t\t\t\tMETODOS DE ORDENAMIENTO");
printf("\n\n\t\t\t\t1. BURBUJA");
printf("\n\t\t\t\t2. SELECCION");
printf("\n\t\t\t\t3. SHELL");
printf("\n\t\t\t\t4. QUICK SORT");
printf("\n\t\t\t\t5. SALIDA");
printf("\n\n\t\t\t\tESCOJA UNA DE LAS OPCIONES [1-5]: ");
scanf("%d", &opcion);
switch(opcion)
{case 1:{Burbuja();
Volver=1;
break;
}
case 2:{Seleccion();
Volver=1;
break;
}
case 3:{Shell();
Volver=1;
break;
}
case 4:{Quick_Sort();
Volver=1;
break;
}
case 5:{Volver=0;
break;
}
}
}while(Volver);
}
Amigo estan muy buenos tus programas me gusta mucho tu blog sobre programacion... pero aqui te tengo esto a ver si me ayudas: me piden que ordene 10 numeros de menor a mayor sin usar arreglos... empeze a hacerlos pero me he vuelto un desastre, mira aqui como iba:
ResponderEliminarhttp://es.answers.yahoo.com/question/index?qid=20110521132251AAgk3M8