Menu de tres opciones, que rellena un vector, lo ordena por metodo Burbuja y Quicksort (compara sus tiempos), y lo vuelve a generar cuantas veces se necesite experimentar mejorado (muestra el tiempo en milisegundos)
pascal:
uses
crt,dos;
const
max=10000;
type
vector=array [1..max] of integer;
var
opc:char;
time1,time2,timeb,timeq:integer;
c:integer;
n:integer;
qa,ba:vector;
generado:integer;
bh1,bm1,bs1,bms1:word;
bh2,bm2,bs2,bms2:word;
qh1,qm1,qs1,qms1:word;
qh2,qm2,qs2,qms2:word;
procedure mostrar(arreglo:vector);
var
c:integer;
x,y:integer;
begin
clrscr;
x:=1;
y:=1;
for c:=1 to max do
begin
gotoxy(x,y);
writeln(arreglo[c]);
if y=23 then
begin
if (x<80)AND(x>75) then
begin
gotoxy(1,24);write('Presiona una tecla para continuar');
readkey;
clrscr;
x:=1;
y:=1;
end
else
begin
x:=x+4;
y:=1;
end;
end
else
begin
y:=y+1;
end;
end;
end;
procedure quickredit(ini,fin:integer; var pos:integer);
var
izq,der,aux:integer;
band:boolean;
begin
izq:=ini;
der:=fin;
pos:=ini;
band:=true;
while band=true do
begin
while (qa[pos]<=qa[der]) and (pos<>der) do
der:=der-1;
if pos=der then
band:=false
else
begin
aux:=qa[pos];
qa[pos]:=qa[der];
qa[der]:=aux;
pos:=der;
while (qa[pos]>=qa[izq]) and (pos<>izq) do
izq:=izq+1;
if pos=izq then
band:=false
else
begin
aux:=qa[pos];
qa[pos]:=qa[izq];
qa[izq]:=aux;
pos:=izq;
end;
end;
end;{while}
end;
procedure quickit (v:vector; n:integer);
var
top,ini,fin,pos:integer;
pmay,pmen:vector;
begin
top:=1;
pmen[top]:=1;
pmay[top]:=n;
while top>0 do
begin
ini:=pmen[top];
fin:=pmay[top];
top:=top-1;
quickredit(ini,fin,pos);
if ini<(pos-1) then
begin
top:=top+1;
pmen[top]:=ini;
pmay[top]:=pos-1;
end;
if fin>(pos+1) then
begin
top:=top+1;
pmen[top]:=pos+1;
pmay[top]:=fin;
end;
end;{while}
end;
procedure qsort(arreglo:vector);
begin
quickit(arreglo,max);
for c:=1 to max do
begin
ba[c]:=arreglo[c];
qa[c]:=arreglo[c];
end;
{mostrar(arreglo);}
end;
procedure bsort(arreglo:vector);
var
c1,c2,aux:integer;
begin
for c1:=1 to max do
for c2:=max downto c1 do
if arreglo[c2]>arreglo[c2+1] then
begin
aux:=arreglo[c2];
arreglo[c2]:=arreglo[c2+1];
arreglo[c2+1]:=aux;
end;
for c:=1 to max do
begin
ba[c]:=arreglo[c];
qa[c]:=arreglo[c];
end;
{mostrar(arreglo);}
end;
begin
generado:=0;
repeat
clrscr;
writeln('1.- Generar');
writeln('2.- Ordenar');
writeln('3.- Ver arreglo');
opc:=readkey;
case ord(opc) of
49:
begin
clrscr;writeln('Opcion 1 - Generar');
for c:=1 to max do
begin
randomize;
ba[c]:=random(999);
qa[c]:=ba[c];
end;
mostrar(ba);
generado:=1;
readkey;
end;
50:
begin
clrscr;writeln('Opcion 2 - Ordenar');
if generado=1 then
begin
gettime(bh1,bm1,bs1,bms1);time1:=(((bh1*3600)+(bm1*60)+bs1)*100)+bms1;
bsort(ba);
gettime(bh2,bm2,bs2,bms2);time2:=(((bh2*3600)+(bm2*60)+bs2)*100)+bms2;
timeb:=time2-time1;
gettime(qh1,qm1,qs1,qms1);time1:=(((qh1*3600)+(qm1*60)+qs1)*100)+qms1;
qsort(qa);
gettime(qh2,qm2,qs2,qms2);time2:=(((qh2*3600)+(qm2*60)+qs2)*100)+qms2;
timeq:=time2-time1;
writeln('Bubble sort: ',timeb,' mili segundos');
writeln('Quick sort: ',timeq,' mili segundos');
{
writeln('Bubble sort: ',bh1,':',bm1,':',bs1,':',bms1,' -> ',bh2,':',bm2,':',bs2,':',bms2);
writeln('Quick sort: ',qh1,':',qm1,':',qs1,':',qms1,' -> ',qh2,':',qm2,':',qs2,':',qms2);
}
end
else
begin
writeln('No hay vector generado');
end;
readkey;
end;
51:
begin
clrscr;writeln('Opcion 3 - Ver arreglo');
if generado=1 then
mostrar(ba)
else
writeln('No hay vector generado');
readkey;
end;
end;
until ord(opc)=27;
end.
{
27 ESC
50 2
49 1
}
crt,dos;
const
max=10000;
type
vector=array [1..max] of integer;
var
opc:char;
time1,time2,timeb,timeq:integer;
c:integer;
n:integer;
qa,ba:vector;
generado:integer;
bh1,bm1,bs1,bms1:word;
bh2,bm2,bs2,bms2:word;
qh1,qm1,qs1,qms1:word;
qh2,qm2,qs2,qms2:word;
procedure mostrar(arreglo:vector);
var
c:integer;
x,y:integer;
begin
clrscr;
x:=1;
y:=1;
for c:=1 to max do
begin
gotoxy(x,y);
writeln(arreglo[c]);
if y=23 then
begin
if (x<80)AND(x>75) then
begin
gotoxy(1,24);write('Presiona una tecla para continuar');
readkey;
clrscr;
x:=1;
y:=1;
end
else
begin
x:=x+4;
y:=1;
end;
end
else
begin
y:=y+1;
end;
end;
end;
procedure quickredit(ini,fin:integer; var pos:integer);
var
izq,der,aux:integer;
band:boolean;
begin
izq:=ini;
der:=fin;
pos:=ini;
band:=true;
while band=true do
begin
while (qa[pos]<=qa[der]) and (pos<>der) do
der:=der-1;
if pos=der then
band:=false
else
begin
aux:=qa[pos];
qa[pos]:=qa[der];
qa[der]:=aux;
pos:=der;
while (qa[pos]>=qa[izq]) and (pos<>izq) do
izq:=izq+1;
if pos=izq then
band:=false
else
begin
aux:=qa[pos];
qa[pos]:=qa[izq];
qa[izq]:=aux;
pos:=izq;
end;
end;
end;{while}
end;
procedure quickit (v:vector; n:integer);
var
top,ini,fin,pos:integer;
pmay,pmen:vector;
begin
top:=1;
pmen[top]:=1;
pmay[top]:=n;
while top>0 do
begin
ini:=pmen[top];
fin:=pmay[top];
top:=top-1;
quickredit(ini,fin,pos);
if ini<(pos-1) then
begin
top:=top+1;
pmen[top]:=ini;
pmay[top]:=pos-1;
end;
if fin>(pos+1) then
begin
top:=top+1;
pmen[top]:=pos+1;
pmay[top]:=fin;
end;
end;{while}
end;
procedure qsort(arreglo:vector);
begin
quickit(arreglo,max);
for c:=1 to max do
begin
ba[c]:=arreglo[c];
qa[c]:=arreglo[c];
end;
{mostrar(arreglo);}
end;
procedure bsort(arreglo:vector);
var
c1,c2,aux:integer;
begin
for c1:=1 to max do
for c2:=max downto c1 do
if arreglo[c2]>arreglo[c2+1] then
begin
aux:=arreglo[c2];
arreglo[c2]:=arreglo[c2+1];
arreglo[c2+1]:=aux;
end;
for c:=1 to max do
begin
ba[c]:=arreglo[c];
qa[c]:=arreglo[c];
end;
{mostrar(arreglo);}
end;
begin
generado:=0;
repeat
clrscr;
writeln('1.- Generar');
writeln('2.- Ordenar');
writeln('3.- Ver arreglo');
opc:=readkey;
case ord(opc) of
49:
begin
clrscr;writeln('Opcion 1 - Generar');
for c:=1 to max do
begin
randomize;
ba[c]:=random(999);
qa[c]:=ba[c];
end;
mostrar(ba);
generado:=1;
readkey;
end;
50:
begin
clrscr;writeln('Opcion 2 - Ordenar');
if generado=1 then
begin
gettime(bh1,bm1,bs1,bms1);time1:=(((bh1*3600)+(bm1*60)+bs1)*100)+bms1;
bsort(ba);
gettime(bh2,bm2,bs2,bms2);time2:=(((bh2*3600)+(bm2*60)+bs2)*100)+bms2;
timeb:=time2-time1;
gettime(qh1,qm1,qs1,qms1);time1:=(((qh1*3600)+(qm1*60)+qs1)*100)+qms1;
qsort(qa);
gettime(qh2,qm2,qs2,qms2);time2:=(((qh2*3600)+(qm2*60)+qs2)*100)+qms2;
timeq:=time2-time1;
writeln('Bubble sort: ',timeb,' mili segundos');
writeln('Quick sort: ',timeq,' mili segundos');
{
writeln('Bubble sort: ',bh1,':',bm1,':',bs1,':',bms1,' -> ',bh2,':',bm2,':',bs2,':',bms2);
writeln('Quick sort: ',qh1,':',qm1,':',qs1,':',qms1,' -> ',qh2,':',qm2,':',qs2,':',qms2);
}
end
else
begin
writeln('No hay vector generado');
end;
readkey;
end;
51:
begin
clrscr;writeln('Opcion 3 - Ver arreglo');
if generado=1 then
mostrar(ba)
else
writeln('No hay vector generado');
readkey;
end;
end;
until ord(opc)=27;
end.
{
27 ESC
50 2
49 1
}