C語(yǔ)言中計(jì)算函數(shù)執(zhí)行時(shí)間的三種方式
這篇文章主要介紹三種計(jì)算執(zhí)行時(shí)間的方式。
方式1: time + difftime
使用time.h標(biāo)準(zhǔn)庫(kù)中的time和difftime函數(shù)可以返回記錄的兩次time_t結(jié)構(gòu)的時(shí)間之間的差值,這種方式只能精確到秒級(jí),代碼示例如下:
#include <stdio.h> #include <time.h> int fibonacci(int n) { if(n == 0 || n == 1) return 1; return fibonacci(n-1) + fibonacci(n-2); } int main() { int n = 0; while(~scanf("%d",&n)) { time_t start_time=0, end_time=0; time(&start_time); printf("fibonacci(%d)=%d\n",n,fibonacci(n)); time(&end_time); printf("Time Used: %f\n",difftime(end_time,start_time)); } return 0; }
- 執(zhí)行結(jié)果如下
45
fibonacci(45)=1836311903
Time Used: 9.000000
方式2: clock + CLOCKS_PER_SEC
另外利用clock函數(shù)代替time函數(shù)也能起到相同作用,這種方式通過(guò)計(jì)算兩個(gè)clock函數(shù)之間的時(shí)鐘單元來(lái)實(shí)現(xiàn),代碼示例如下:
#include <stdio.h> #include <time.h> int fibonacci(int n) { if(n == 0 || n == 1) return 1; return fibonacci(n-1) + fibonacci(n-2); } int main() { int n = 0; while(~scanf("%d",&n)) { time_t start_time=0, end_time=0; start_time=clock(); printf("fibonacci(%d)=%d\n",n,fibonacci(n)); end_time=clock(); printf("Time Used: %f\n",(double)(end_time-start_time)/CLOCKS_PER_SEC); } return 0; }
- 執(zhí)行結(jié)果如下
45
fibonacci(45)=1836311903
Time Used: 8.715660
方式3: timeb+ftime
另外利用clock函數(shù)代替time函數(shù)也能起到相同作用,這種方式通過(guò)計(jì)算兩個(gè)clock函數(shù)之間的時(shí)鐘單元來(lái)實(shí)現(xiàn),代碼示例如下:
#include <stdio.h> #include <sys/timeb.h> #include <string.h> int fibonacci(int n) { if(n == 0 || n == 1) return 1; return fibonacci(n-1) + fibonacci(n-2); } int main() { int n = 0; while(~scanf("%d",&n)) { struct timeb start_time, end_time; memset(&start_time,0,sizeof(struct timeb)); memset(&start_time,0,sizeof(struct timeb)); ftime(&start_time); printf("fibonacci(%d)=%d\n",n,fibonacci(n)); ftime(&end_time); printf("Time Used: %d.%d\n",end_time.time-start_time.time,end_time.millitm-start_time.millitm); } return 0; }
- 執(zhí)行結(jié)果如下
45
fibonacci(45)=1836311903
Time Used: 8.621
總結(jié)
到此這篇關(guān)于C語(yǔ)言中計(jì)算函數(shù)執(zhí)行時(shí)間的三種方式的文章就介紹到這了,更多相關(guān)C語(yǔ)言計(jì)算函數(shù)執(zhí)行時(shí)間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語(yǔ)言實(shí)現(xiàn)日期和時(shí)間處理的常用函數(shù)總結(jié)
- C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)的時(shí)間復(fù)雜度和空間復(fù)雜度
- C語(yǔ)言實(shí)現(xiàn)時(shí)間處理工具的示例代碼
- C語(yǔ)言算法的時(shí)間復(fù)雜度和空間復(fù)雜度
- C語(yǔ)言系統(tǒng)日期和時(shí)間實(shí)例詳解
- C語(yǔ)言標(biāo)準(zhǔn)時(shí)間與秒單位相互轉(zhuǎn)換
- C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)通關(guān)時(shí)間復(fù)雜度和空間復(fù)雜度
- C語(yǔ)言 詳細(xì)解析時(shí)間復(fù)雜度與空間復(fù)雜度
- C語(yǔ)言?超詳細(xì)講解算法的時(shí)間復(fù)雜度和空間復(fù)雜度
- C語(yǔ)言時(shí)間函數(shù)的ctime()和gmtime()你了解嗎
- C語(yǔ)言時(shí)間函數(shù)之mktime和difftime詳解
相關(guān)文章
一文詳解C++中的轉(zhuǎn)換構(gòu)造函數(shù)
在 C/C++ 中,不同的數(shù)據(jù)類型之間可以相互轉(zhuǎn)換,無(wú)需用戶指明如何轉(zhuǎn)換的稱為自動(dòng)類型轉(zhuǎn)換(隱式類型轉(zhuǎn)換),需要用戶顯式地指明如何轉(zhuǎn)換的稱為強(qiáng)制類型轉(zhuǎn)換,本文就給大家詳細(xì)介紹一下C++的轉(zhuǎn)換構(gòu)造函數(shù),需要的朋友可以參考下2023-09-09一文帶你搞懂C語(yǔ)言動(dòng)態(tài)內(nèi)存管理
動(dòng)態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存。本文將通過(guò)幾個(gè)示例帶大家深入了解一下C語(yǔ)言的動(dòng)態(tài)內(nèi)存管理,需要的可以參考一下2022-11-11利用C語(yǔ)言編寫一個(gè)無(wú)限循環(huán)語(yǔ)句
這篇文章主要介紹了利用C語(yǔ)言編寫一個(gè)無(wú)限循環(huán)語(yǔ)句問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11C++在成員函數(shù)中使用STL的find_if函數(shù)實(shí)例
這篇文章主要介紹了C++在成員函數(shù)中使用STL的find_if函數(shù)實(shí)例,包括了STL中find_if函數(shù)的具體用法及相關(guān)的完整實(shí)例,非常具有參考借鑒價(jià)值,需要的朋友可以參考下2014-10-10C語(yǔ)言數(shù)組實(shí)現(xiàn)三子棋應(yīng)用實(shí)例
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言數(shù)組實(shí)現(xiàn)三子棋應(yīng)用實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01詳解C++編程中用數(shù)組名作函數(shù)參數(shù)的方法
這篇文章主要介紹了詳解C++編程中用數(shù)組名作函數(shù)參數(shù)的方法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09VSCode配置C++環(huán)境的方法步驟(MSVC)
這篇文章主要介紹了VSCode配置C++環(huán)境的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05