Quick Sort
pascal:
program qsort;
uses
crt;
const
n=10;
type
vec=array[1..n]of integer;
var
v:vec;
c:integer;
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 (v[pos]<=v[der]) and (pos<>der) do
der:=der-1;
if pos=der then
band:=false
else
begin
aux:=v[pos];
v[pos]:=v[der];
v[der]:=aux;
pos:=der;
while (v[pos]>=v[izq]) and (pos<>izq) do
izq:=izq+1;
if pos=izq then
band:=false
else
begin
aux:=v[pos];
v[pos]:=v[izq];
v[izq]:=aux;
pos:=izq;
end;
end;
end;{while}
end;
procedure quickit (v:vec; n:integer);
var
top,ini,fin,pos:integer;
pmay,pmen:vec;
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;
begin
clrscr;
for c:=1 to n do
begin
write('Dame un numero: ');
readln(v[c]);
end;
quickit(v,n);
writeln;
writeln('Vector acomodado: ');
for c:=1 to n do
begin
write(v[c],' ');
end;
readkey;
end.
uses
crt;
const
n=10;
type
vec=array[1..n]of integer;
var
v:vec;
c:integer;
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 (v[pos]<=v[der]) and (pos<>der) do
der:=der-1;
if pos=der then
band:=false
else
begin
aux:=v[pos];
v[pos]:=v[der];
v[der]:=aux;
pos:=der;
while (v[pos]>=v[izq]) and (pos<>izq) do
izq:=izq+1;
if pos=izq then
band:=false
else
begin
aux:=v[pos];
v[pos]:=v[izq];
v[izq]:=aux;
pos:=izq;
end;
end;
end;{while}
end;
procedure quickit (v:vec; n:integer);
var
top,ini,fin,pos:integer;
pmay,pmen:vec;
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;
begin
clrscr;
for c:=1 to n do
begin
write('Dame un numero: ');
readln(v[c]);
end;
quickit(v,n);
writeln;
writeln('Vector acomodado: ');
for c:=1 to n do
begin
write(v[c],' ');
end;
readkey;
end.