program project1; uses math; type DblDyneVec = array of double; procedure Exchange(var a, b: Double); var tmp: Double; begin tmp := a; a := b; b := tmp; end; procedure QuickSortOn(X: DblDyneVec; Y: DblDyneVec = nil; Z: DblDyneVec = nil); procedure DoQuickSort(L, R: Integer); var I,J: Integer; P: Integer; begin repeat I := L; J := R; P := (L + R) div 2; repeat while CompareValue(X[P], X[I]) > 0 do inc(I); while CompareValue(X[P], X[J]) < 0 do dec(J); if I <= J then begin if I <> J then begin Exchange(X[I], X[J]); if Y <> nil then Exchange(Y[I], Y[J]); if Z <> nil then Exchange(Z[I], Z[J]); end; if P = I then P := J else if P = J then P := I; inc(I); dec(J); end; until I > J; if L < J then DoQuickSort(L, J); L := I; until I >= R; end; begin DoQuickSort(0, High(X)); end; var x: DblDyneVec; y: DblDyneVec; i: Integer; begin SetLength(x, 10); SetLength(y, 10); for i := 0 to High(x) do begin x[i] := Random(100); y[i] := i; end; for i := 0 to High(x) do WriteLn('i: x=', x[i]:0:0, ' y=', y[i]:0:0); WriteLn; QuickSortOn(X, Y); for i := 0 to High(x) do WriteLn(i, ': x=', x[i]:0:0, ' y=', y[i]:0:0); ReadLn; end.