почему бы не сравнить быстродействие кода разных компиляторов скажем на банальной сортировке громадного массива чисел...
какие проблемы
Дельфи:
Код:
procedure QuickSort(var A: array of Integer);
procedure Q1(var A: array of Integer; iLo, iHi: Integer);
var
Lo, Hi, Mid, T: Integer;
begin
Lo := iLo;
Hi := iHi;
Mid := A[(Lo + Hi) div 2];
repeat
while A[Lo] < Mid do Inc(Lo);
while A[Hi] > Mid do Dec(Hi);
if Lo <= Hi then
begin
T := A[Lo];
A[Lo] := A[Hi];
A[Hi] := T;
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
if Hi > iLo then Q1(A, iLo, Hi);
if Lo < iHi then Q1(A, Lo, iHi);
end;
begin
Q1(A, Low(A), High(A));
end;
procedure TThreadSortForm.Button1Click(Sender: TObject);
type
PSortArray = ^TSortArray;
TSortArray = array[0..20000000] of Integer;
var
i: Integer;
T: DWORD;
SortArray: PSortArray;
begin
GetMem(SortArray, sizeof(TSortArray));
T := GetTickCount();
for I := Low(SortArray^) to High(SortArray^) do
SortArray[I] := Random(500000);
QuickSort(SortArray^);
T := GetTickCount() - T;
ShowMessage(IntToStr(T));
end;
Си-диез:
Код:
private void Q1(int[] A, int iLo, int iHi)
{
int Lo = iLo;
int Hi = iHi;
int Mid = A[(Lo + Hi) / 2];
do {
while (A[Lo] < Mid)
Lo++;
while (A[Hi] > Mid)
Hi--;
if (Lo <= Hi)
{
int T = A[Lo];
A[Lo] = A[Hi];
A[Hi] = T;
Lo++;
Hi--;
}
} while (Hi >= Lo);
if (Hi > iLo)
Q1(A, iLo, Hi);
if (Lo < iHi)
Q1(A, Lo, iHi);
}
private void QuickSort(int[] A, int max)
{
Q1(A, 0, max);
}
private void button3_Click(object sender, EventArgs e)
{
int n = 20000000;
int[] A = new int[n];
int T = Environment.TickCount;
Random rnd = new Random();
for (int i = 0; i < n; i++)
{
A[i] = rnd.Next(500000);
}
QuickSort(A, n-1);
T = Environment.TickCount - T;
MessageBox.Show(T.ToString());
}
Результаты: 2594 против 4360мс. Думаю понятно, в чью пользу. Оптимизмруйте