2016-04-25 57 views
0

這裏我試圖計算完成合並sort.But所需的時間,但開始和結束之間的區別顯示零secend.I不知道是什麼問題。爲方便我發佈只有計算時間的主要功能。時間差爲零秒

#include<stdio.h> 
#include<time.h> 
int main(){ 
    clock_t start,end,diff; 
    start=clock(); 
    int arr[4]={12,2,56,1}; 
    int i; 
    printf("beforn sort\n"); 
    printf("\n-------------\n"); 
    for(i=0;i<4;i++){ 
     printf("%d ",arr[i]); 
    } 
    printf("\n \n"); 
    Merge_sort(arr,0,3); 
    printf("after merge sort\n"); 
    printf("\n-------------\n"); 
    for(i=0;i<4;i++){ 
     printf("%d ",arr[i]); 
    } 
    printf("\n"); 
    end=clock(); 
    diff=(double)(end-start)/CLOCKS_PER_SEC; 
    printf("total time is %f sec ",diff); 
} 
+1

也許它花了不到一秒 – bruceg

+1

更重要的是,也許它花的時間少於分辨率。對4元素數組進行合併排序將非常快*。 –

+1

這是除非處理器*非常慢* ... –

回答

2

clock()返回自程序啓動以來流逝的時鐘滴答數。因此,

start=clock(); 

給出從啓動的程序到調用clock()的時鐘滴答的數量。 在排序前給你時鐘滴答。這是時鐘滴答的數量,而不是秒。

後排序

end=clock() 

給出了時鐘的數量從推出至clock()程序蜱被調用。 它給你排序後的時鐘滴答。這是時鐘滴答的數量,而不是秒。

現在end-start給分類處理過程中的時鐘週期數(這還不算秒)

(時鐘週期數)/(時鐘數在一秒蜱)=以秒

時間

(end-start)/CLOCKS_PER_SEC給出排序過程所需的時間,以秒爲單位。但是在C中給出了一個整數。所以它必須被精確地加倍。這給了。

double diff; 
diff=(double)(end-start)/CLOCKS_PER_SEC; 
+0

優秀,,謝謝:)) –

1

CLOCKS_PER_SEC被定義爲clock_t類型,它被定義爲一個算術類型,在N1256 7.23.1。它暗示clock_t可能是一個整數類型。

我想你應該改變diff的類型爲double。這樣做也會使printf()的最後一次使用正確。

+0

謝謝,它的作品!爲什麼按CLOCK_Per_SECOND除以秒給我時間...這是令人困惑的。我知道這是另一個問題,但你能回答嗎? –

+0

維度分析將揭示你的新問題的答案。 – nicomp

+0

@ AL-zami閱讀手冊頁,解釋它。 –