programa con quicksort completo de una cedena
estoy buscando si encuentro un programa de ordenamiento rapido que se base en un arreglo de numeros
Tengo este con numeros aleatorios pero es de un menu con varios metodos pero puedes dejar solo el que te interese:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void burbuja(int a[],int b);
void seleccion(int a[],int b);
void insercion(int a[],int b);
void shell(int a[],int b);
void quicksort(int a[],int ei,int ed);
int secuencial(int e,int a[],int n);
int binaria(int e,int a[],int n);
void intercambia(int *a,int *b);
void main()
{
int i,a[5],n=5,e,p;
char resp;
clrscr();
printf("n LOS NUMEROS ALEATORIOS SIN ORDENAR SON:");
for (i=0;i<n;i++)
{
a[i]=rand();
printf("n%d,",a[i]);
}
printf("n QUE METODO DESEAS UTILIZAR:nt *Metodos de ordenamientot*Metodos de busquedant 1)Burbuja 6)Secuencialnt 2)Selecciont 7)Binariont 3)Insercionnt 4)Shellnt 5)Quicksortnt");
scanf("%c",&resp);
switch(resp)
{
case '1':{
burbuja(a,n);
printf("nlos numeros aleatorios ordenados sonn");
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
case '2':{
seleccion(a,n);
printf("nlos numeros aleatorios ordenados sonn");
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
case '3':{
insercion(a,n);
printf("nlos numeros aleatorios ordenados sonn");
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
case '4':{
shell(a,n);
printf("nlos numeros aleatorios ordenados sonn");
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
case '5':{
int ei=0,ed=n;
quicksort(a,ei,ed);
printf("nlos numeros aleatorios ordenados sonn");
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
case '6':{
p=secuencial(e,a,n);
printf("nla posicion del numero es:n",p);
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
case '7':{
burbuja(a,n);
p=binaria(e,a,n);
printf("nla posicion del numero es:n",p);
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
default:printf("error en la opcion elegida");
}
getch();
}
void intercambia(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void burbuja(int a[],int n)
{
int i,j;
for(j=n;j>0;j--)
for(i=0;i<j;i++)
if (a[i]>a[i+1])
intercambia(&a[i],&a[i+1]);
}
void seleccion(int a[],int n)
{
int i,j,m;
for (i=0;i<n;i++)
{
m=i;
for (j=i+1;j<=n;j++)
if (a[j]<a[m])
m=j;
if (i!=m)
intercambia(&a[i],&a[m]);
}
}
void insercion(int a[],int n)
{
int i,j;
for (i=1;i<=n;i++)
for (j=i;((j>0)&&((a[j])<(a[j-1])));j--)
intercambia (&a[j],&a[j-1]);
}
void shell(int a[],int n)
{
int i;
float dif;
dif=n;
while (dif>0)
{
dif=dif*.5;
for (i=0;i<(n-dif);i++)
if (a[i]>a[i+dif])
intercambia(&a[i],&a[i+1]);
}
}
void quicksort(int a[],int ei,int ed)
{
int i,j,piv;
i=ei;
j=ed;
if (ei>=ed)
return;
piv=(ei+ed)/2;
while (i<j)
{
while ((i<j)&&(a[i]<=a[ed]))
i++;
while ((i<j)&&(a[i]<=a[ed]))
j--;
if (i!=j)
intercambia(&a[i],&a[j]);
}
intercambia (&a[i],&a[ed]);
quicksort(a,ei,i-1);
quicksort(a,i+1,ed);
}
int secuencial(int e,int a[],int n)
{
int i;
for (i=0;i<=n;i++)
{
if (a[i]==e)
return (i);
}
return (-1);
}
int binaria(int e,int a[],int n)
{
int ei,ed,m;
ei=0;
ed=n;
while (ei<=ed)
{
m=(ei+ed)/2;
if (a[m]==e)
return (m);
else
if (e<a[m])
ed=m-1;
else
ei=m+1;
}
return (-1);
}
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void burbuja(int a[],int b);
void seleccion(int a[],int b);
void insercion(int a[],int b);
void shell(int a[],int b);
void quicksort(int a[],int ei,int ed);
int secuencial(int e,int a[],int n);
int binaria(int e,int a[],int n);
void intercambia(int *a,int *b);
void main()
{
int i,a[5],n=5,e,p;
char resp;
clrscr();
printf("n LOS NUMEROS ALEATORIOS SIN ORDENAR SON:");
for (i=0;i<n;i++)
{
a[i]=rand();
printf("n%d,",a[i]);
}
printf("n QUE METODO DESEAS UTILIZAR:nt *Metodos de ordenamientot*Metodos de busquedant 1)Burbuja 6)Secuencialnt 2)Selecciont 7)Binariont 3)Insercionnt 4)Shellnt 5)Quicksortnt");
scanf("%c",&resp);
switch(resp)
{
case '1':{
burbuja(a,n);
printf("nlos numeros aleatorios ordenados sonn");
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
case '2':{
seleccion(a,n);
printf("nlos numeros aleatorios ordenados sonn");
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
case '3':{
insercion(a,n);
printf("nlos numeros aleatorios ordenados sonn");
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
case '4':{
shell(a,n);
printf("nlos numeros aleatorios ordenados sonn");
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
case '5':{
int ei=0,ed=n;
quicksort(a,ei,ed);
printf("nlos numeros aleatorios ordenados sonn");
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
case '6':{
p=secuencial(e,a,n);
printf("nla posicion del numero es:n",p);
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
case '7':{
burbuja(a,n);
p=binaria(e,a,n);
printf("nla posicion del numero es:n",p);
for (i=0;i<=n;i++)
printf("n%d,",a[i]);
break;
}
default:printf("error en la opcion elegida");
}
getch();
}
void intercambia(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void burbuja(int a[],int n)
{
int i,j;
for(j=n;j>0;j--)
for(i=0;i<j;i++)
if (a[i]>a[i+1])
intercambia(&a[i],&a[i+1]);
}
void seleccion(int a[],int n)
{
int i,j,m;
for (i=0;i<n;i++)
{
m=i;
for (j=i+1;j<=n;j++)
if (a[j]<a[m])
m=j;
if (i!=m)
intercambia(&a[i],&a[m]);
}
}
void insercion(int a[],int n)
{
int i,j;
for (i=1;i<=n;i++)
for (j=i;((j>0)&&((a[j])<(a[j-1])));j--)
intercambia (&a[j],&a[j-1]);
}
void shell(int a[],int n)
{
int i;
float dif;
dif=n;
while (dif>0)
{
dif=dif*.5;
for (i=0;i<(n-dif);i++)
if (a[i]>a[i+dif])
intercambia(&a[i],&a[i+1]);
}
}
void quicksort(int a[],int ei,int ed)
{
int i,j,piv;
i=ei;
j=ed;
if (ei>=ed)
return;
piv=(ei+ed)/2;
while (i<j)
{
while ((i<j)&&(a[i]<=a[ed]))
i++;
while ((i<j)&&(a[i]<=a[ed]))
j--;
if (i!=j)
intercambia(&a[i],&a[j]);
}
intercambia (&a[i],&a[ed]);
quicksort(a,ei,i-1);
quicksort(a,i+1,ed);
}
int secuencial(int e,int a[],int n)
{
int i;
for (i=0;i<=n;i++)
{
if (a[i]==e)
return (i);
}
return (-1);
}
int binaria(int e,int a[],int n)
{
int ei,ed,m;
ei=0;
ed=n;
while (ei<=ed)
{
m=(ei+ed)/2;
if (a[m]==e)
return (m);
else
if (e<a[m])
ed=m-1;
else
ei=m+1;
}
return (-1);
}
PRODUCE QUICK SORT;
VAR
X:Array[1..N]Of integer;
producere quick(li,ls:integer);
var
i:=integer;
producere rangos(li,ls:integer:var j:integer);
var
ar,ab,a:integer;
begin
a:=x[li];
j:=li;
ar:=li;
repeat
while(ar><b)and(x[ar]<=a)do
begin
dec(ar);
end;
j:=ar;
if(ar< >ab)then
begin
inc(ab);
end;
j:=ab;
if ab< > <r then
begin
x[ar]:=x[ab];
end;
end;
until(ab=ar);
x[j]:(ab=ar);
x[j]:=a;
end;
begin
if(li<ls)then
begin
rangos(li,ls,j);
quick(li,j-1);
quick(j+1,ls);
end;
end;
begin
quick(1,n);
end;
gracias
VAR
X:Array[1..N]Of integer;
producere quick(li,ls:integer);
var
i:=integer;
producere rangos(li,ls:integer:var j:integer);
var
ar,ab,a:integer;
begin
a:=x[li];
j:=li;
ar:=li;
repeat
while(ar><b)and(x[ar]<=a)do
begin
dec(ar);
end;
j:=ar;
if(ar< >ab)then
begin
inc(ab);
end;
j:=ab;
if ab< > <r then
begin
x[ar]:=x[ab];
end;
end;
until(ab=ar);
x[j]:(ab=ar);
x[j]:=a;
end;
begin
if(li<ls)then
begin
rangos(li,ls,j);
quick(li,j-1);
quick(j+1,ls);
end;
end;
begin
quick(1,n);
end;
gracias