var d1,d2:tdatetime; begin d1:=now(); for i:=0 to 10000 do //你的代码 d2:=now(); //d2-d1就是你的时间,而且时间太短不精确,可以做个循环,不如1000次或10000次或更多。
var cc: Cardinal; begin cc := GetTickCount; //你的程序 cc := GetTickCount - cc; ShowMessage(CurrToStr(cc) + '豪秒'); end;
谢谢楼上两位。可是测试的数据还是0,放大多少倍都没用。原代码是: var cc: Cardinal; begin cc := GetTickCount; for I:=Low(A) to High(A)-1 do for J:=I+1 to High(A) do if A[I]>A[J] then begin T:=A[I]; A[I]:=A[J]; A[J]:=T; end; cc := GetTickCount-cc; Select_Label.Caption:=('选择排序执行时间:'+CurrToStr(cc) + '豪秒'); end
QueryPerformanceFrequency QueryPerformanceCounter
还是没解决 为什么插入排序比快速排序的时间用的还少?? (在一般情况下,我已经测试了好很多组数据)procedure TForm1.InsertSort(var A: TSortArray); var I,J,Temp,K:Integer; cc: Cardinal; begin SortBehind_RichEdit.Clear; cc := GetTickCount; for K:=0 to 1000 do //延时用 begin for I:=Low(A)+1 to High(A) do begin Temp:= A[I]; J:=I-1; while (Temp<A[J]) and (J>=Low(A)) do begin A[J+1]:=A[J]; J:=J-1; end; A[J+1]:=Temp; end; end; cc := GetTickCount-cc; Insert_Label.Caption:=('插入排序执行时间:'+CurrToStr(cc) + ' 豪秒'); end;
d1,d2:tdatetime;
begin
d1:=now();
for i:=0 to 10000 do
//你的代码
d2:=now();
//d2-d1就是你的时间,而且时间太短不精确,可以做个循环,不如1000次或10000次或更多。
cc: Cardinal;
begin
cc := GetTickCount;
//你的程序
cc := GetTickCount - cc;
ShowMessage(CurrToStr(cc) + '豪秒');
end;
var cc: Cardinal;
begin
cc := GetTickCount;
for I:=Low(A) to High(A)-1 do
for J:=I+1 to High(A) do
if A[I]>A[J] then
begin
T:=A[I];
A[I]:=A[J];
A[J]:=T;
end;
cc := GetTickCount-cc;
Select_Label.Caption:=('选择排序执行时间:'+CurrToStr(cc) + '豪秒');
end
QueryPerformanceCounter
为什么插入排序比快速排序的时间用的还少??
(在一般情况下,我已经测试了好很多组数据)procedure TForm1.InsertSort(var A: TSortArray);
var I,J,Temp,K:Integer;
cc: Cardinal;
begin
SortBehind_RichEdit.Clear;
cc := GetTickCount;
for K:=0 to 1000 do //延时用
begin
for I:=Low(A)+1 to High(A) do
begin
Temp:= A[I];
J:=I-1;
while (Temp<A[J]) and (J>=Low(A)) do
begin
A[J+1]:=A[J];
J:=J-1;
end;
A[J+1]:=Temp;
end;
end;
cc := GetTickCount-cc;
Insert_Label.Caption:=('插入排序执行时间:'+CurrToStr(cc) + ' 豪秒');
end;
得到频率
QueryPerformanceCounter
得到两次次数差
次数差除以频率=时间,可以精确到0.00000000000001s
比GETTICKCOUNT精度要高
QueryPerformanceFrequency
QueryPerformanceCounter
解决了问题。
学到东西了。