![](/img/trans.png)
[英]How to get approximate time, when an algorithm takes zero second/milli-second times?
[英]why sorting algorithm takes zero seconds
這是算法
#include<iostream>
#include<Windows.h>
#include<time.h>
using namespace std;
int main(){
int a[10]={12,3,5,2,7,80,10,1,16,30};
long ts,te;
srand(::GetTickCount());
ts=clock();
for (int i=0;i<10;i++){
for (int j=9;j>i;j--){
if (a[j]<a[j-1]){
int t=a[j];a[j]=a[j-1];a[j-1]=t;
}
}
}
te=clock();
cout<<" time elapsed "<<te-ts<<endl;
return 0;
}
但是我很驚訝,因為它給了我零輸出,我正在測量從代碼開始到完成的時間,為什么?我的計算機不是所謂的超級計算機,這個代碼片段出了什么問題?
除非您使用打孔卡編寫程序,否則對10個數字進行排序所花費的時間不會少於一勾,您應該不會感到驚訝。 如果您想要更准確的代碼配置文件,請使用毫秒,這將為您提供一個更好的主意。
循環中最里面的指令可以運行100次-與當今的低端處理器相比,這算不了什么。
編輯:我用100000個數字測試了代碼,這是for循環內的10 ^ 10次迭代,只花了3秒。
您不應該感到驚訝,對十個數字進行排序所需的時間不到一秒鍾。 多次重復排序以獲得有意義的時間。
我的計算機用完全相同的起始數組花費0.18秒運行一百萬次循環。 因此,每種排序大約需要180微秒。 這太好了,無法通過一對clock()
調用進行測量。
您可以使用高分辨率計時器獲得更准確的時間測量。 請參閱http://www.songho.ca/misc/timer/timer.html 。您嘗試測量的時間在微秒范圍內!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.