program sortowanie; {$APPTYPE CONSOLE} uses SysUtils, windows; var zakres,srod,x,n,o,q,i,z:longint; S,A:array[1..1000000] of Longint; B:array[1..3] of Longint; start1,stop1:Double; timeEnd,TimeStart,freq,timestart1,timeend1:Int64; czas:extended; F:textfile; procedure quicksortS(start,stop:longint); var h,i,j,x:longint; BEgin i:=start; j:=stop; x:=A[ (start+stop) div 2]; repeat while (a[j]>x) do j:=j-1; while (a[i]=j); if (startx) do j:=j-1; while (a[i]=j); if (start= A[B[2]]) and (A[B[1]] <= A[B[3]])) or ((A[B[1]] <= A[B[2]])) and (A[B[1]] >= A[B[3]]) then x:=A[B[1]]; if ((A[B[1]] >= A[B[2]]) and (A[B[3]] <= A[B[2]])) or ((A[B[1]] <= A[B[2]])) and (A[B[3]] >= A[B[2]]) then x:=A[B[2]]; if ((A[B[1]] >= A[B[3]]) and (A[B[2]] <= A[B[3]])) or ((A[B[1]] <= A[B[3]]) and (A[B[2]] >= A[B[3]])) then x:=A[B[3]]; //Writeln('x ', x, 'z ',z); repeat while (a[j]>x) do j:=j-1; while (a[i]=j); if (startx) do j:=j-1; while (a[i]=j); if (start60000; //z=2; //n>100000 { TODO -oUser -cConsole Main : Insert code here } end; Procedure mal; begin AssignFile(f,'malQ.txt'); Rewrite(f); Close(f); writeln('podaj n'); readln(n); AssignFile(f,'malQ.txt'); Reset(F); Append(f); Writeln(F,'Liczba n Quick-Prawy Quick-srodkowy Quick-mediana'); CloseFile(F); repeat AssignFile(f,'malQ.txt'); Reset(f); Append(F); Write(F,n,' '); z:=z+1; Writeln(n); for i:=1 to n do BEgin A[i]:=(n-i) +1 ; // Write(a[i],' '); end; if QueryPerformanceFrequency(Freq) then QueryPerformanceCounter(TimeStart); QuicksortP(1,n); QueryPerformanceCounter(TimeEnd); czas:=(TimeEnd-TimeStart)/Freq*1000; writeln('qP :',czas); Write(F,' ',czas,' '); //Write(F,'niedzialaaaaaaaaaaa '); for i:=1 to n do BEgin A[i]:=(n-i) +1 ; // Write(a[i],' '); end; if QueryPerformanceFrequency(Freq) then QueryPerformanceCounter(TimeStart); QuicksortS(1,n); QueryPerformanceCounter(TimeEnd); czas:=(TimeEnd-TimeStart)/Freq*1000; writeln('qS :',czas); Write(F,' ',czas,' '); for i:=1 to n do BEgin A[i]:=(n-i) +1 ; // Write(a[i],' '); end; if QueryPerformanceFrequency(Freq) then QueryPerformanceCounter(TimeStart); QuicksortM(1,n); QueryPerformanceCounter(TimeEnd); czas:=(TimeEnd-TimeStart)/Freq*1000; writeln('qM :',czas); Writeln(F,' ',czas,' '); CloseFile(F); n:=n+1000; until n>47000; { TODO -oUser -cConsole Main : Insert code here } end; Procedure staly; begin AssignFile(f,'stalQ.txt'); Rewrite(f); Close(f); writeln('podaj n'); readln(n); AssignFile(f,'stalQ.txt'); Reset(F); Append(f); Writeln(F,'Liczba n Quick-Prawy Quick-srodkowy Quick-mediana'); CloseFile(F); repeat AssignFile(f,'stalQ.txt'); Reset(f); Append(F); Write(F,n,' '); q:=10; Writeln(n); for i:=1 to n do BEgin A[i]:=q ; // Write(a[i],' '); end; if QueryPerformanceFrequency(Freq) then QueryPerformanceCounter(TimeStart); QuicksortP(1,n); QueryPerformanceCounter(TimeEnd); czas:=(TimeEnd-TimeStart)/Freq*1000; writeln('qP :',czas); Write(F,' ',czas,' '); for i:=1 to n do BEgin A[i]:=q ; // Write(a[i],' '); end; if QueryPerformanceFrequency(Freq) then QueryPerformanceCounter(TimeStart); QuicksortS(1,n); QueryPerformanceCounter(TimeEnd); czas:=(TimeEnd-TimeStart)/Freq*1000; writeln('qS :',czas); Write(F,' ',czas,' '); for i:=1 to n do BEgin A[i]:=q ; // Write(a[i],' '); end; if QueryPerformanceFrequency(Freq) then QueryPerformanceCounter(TimeStart); QuicksortM(1,n); QueryPerformanceCounter(TimeEnd); czas:=(TimeEnd-TimeStart)/Freq*1000; writeln('qM :',czas); Writeln(F,' ',czas,' '); CloseFile(F); n:=n+5000; until n>60000; { TODO -oUser -cConsole Main : Insert code here } end; Procedure aksztalt; var n,i,z,q:Longint; begin AssignFile(f,'Aksztalt.txt'); Rewrite(f); Close(f); writeln('podaj n'); readln(n); AssignFile(f,'Aksztalt.txt'); Reset(F); Append(f); Writeln(F,'Liczba n Quick-Prawy Quick-srodkowy Quick-mediana'); CloseFile(F); repeat AssignFile(f,'Aksztalt.txt'); Reset(f); Append(F); Write(F,n,' '); Writeln(n); //tworzenie tablicy a-ksztaltnej q:=1; for z:=1 to (n div 2) do Begin A[z]:=q; S[z]:=A[z]; q:=q+2; // write(a[z],' '); End; q:=q-1; for z:=(n div 2)+1 to n do Begin A[z]:=q; S[z]:=q-2; q:=q-2; //Write(a[z],' '); End ; if QueryPerformanceFrequency(Freq) then QueryPerformanceCounter(TimeStart); QuicksortP(1,n); QueryPerformanceCounter(TimeEnd); czas:=(TimeEnd-TimeStart)/Freq*1000; writeln('qP :',czas); Write(F,' ',czas,' '); for z:=1 to n do BEgin A[z]:=S[z] ; // Write(a[i],' '); end; if QueryPerformanceFrequency(Freq) then QueryPerformanceCounter(TimeStart); QuicksortS(1,n); // atu mi sie wywala dla srodkowego elementu. QueryPerformanceCounter(TimeEnd); czas:=(TimeEnd-TimeStart)/Freq*1000; writeln('qS :',czas); Write(F,' ',czas,' '); for z:=1 to n do BEgin A[z]:=S[z] ; // Write(a[i],' '); end; if QueryPerformanceFrequency(Freq) then QueryPerformanceCounter(TimeStart); QuicksortM(1,n); QueryPerformanceCounter(TimeEnd); czas:=(TimeEnd-TimeStart)/Freq*1000; writeln('qM :',czas); Writeln(F,' ',czas,' '); CloseFile(F); //for i:=1 to n do Write(a[i],' '); n:=n+50000; until n>600000; { TODO -oUser -cConsole Main : Insert code here } end; BEGIN mal; //staly; //losowy //aksztalt; {readln(n); q:=1; srod:=n div 2; for z:=1 to (n div 2) do Begin A[z]:=q; S[z]:=A[z]; q:=q+2; //write(a[z],' '); End; q:=q-1; for z:=(n div 2)+1 to n do Begin q:=q-2; A[z]:=q; S[z]:=A[z]; //Write(a[z],' '); End ; if QueryPerformanceFrequency(Freq) then QueryPerformanceCounter(TimeStart); QuicksortS(1,n); // atu mi sie wywala dla srodkowego elementu. QueryPerformanceCounter(TimeEnd); czas:=(TimeEnd-TimeStart)/Freq*1000; writeln('qS :',czas); readln; for z:=1 to n do BEgin //A[z]:=S[z] ; //Write(a[z],' '); end;} readln; END.