2017-12-19 8 views
0

버블 정렬에 걸리는 시간을 측정하기 위해 10 개의 큰 숫자를 취하려고합니다. 그 숫자를 10의 배열에 넣습니다. 그런 다음 거품을 10 번 정렬하고 매번 찍은 시간을 인쇄합니다.버블 정렬에 걸리는 시간을 측정하는 방법 숫자 10을

문제는 어떤 이유로 든 메신저가 0입니다.

int n = sizeof(arr10)/sizeof(arr10[0]); 
      start=clock(); 
      bubbleSort(arr10, n); 
      end=clock(); 
      cpu_time_used = (double) (end - start)/CLOCKS_PER_SEC; 
      printf("Bubble Sort time= %f\n",cpu_time_used); 

여기 버블 정렬의 기능입니다 : 여기

내가 주에있는 것입니다 초를 인쇄 할

void bubbleSort(int arr[], int n) 
{ 

int i, j; 
for (i = 0; i < n-1; i++) 

    // Last i elements are already in place 
    for (j = 0; j < n-i-1; j++) 
     if (arr[j] > arr[j+1]) 
      swap(&arr[j], &arr[j+1]); 
} 

void swap(int *xp, int *yp) 
{ 
    int temp = *xp; 
    *xp = *yp; 
    *yp = temp; 
} 
+0

인쇄 시작 및 끝내기를 시도하십시오. clock()이 반환하는 것은 무엇입니까? 모든 것이 정상이면, 그때 그 결정을하십시오. – recycler

+2

어떤 컴파일러를 사용하고 있습니까? 배열이 하드 코드되어 있습니까? 컴파일러는 출력이 의존하지 않기 때문에 전체 정렬을 버릴 수도 있습니다. – klutt

+1

더 적절한 방법은 다양한 방법으로 스왑의 수를 계산하는 것입니다. Crudely 당신은 글로벌 변수를 사용하여 그렇게 할 수 있습니다. – Bathsheba

답변

0

사용 %e 형식 지정자. 가장 가능성있는 일은 숫자가 너무 작아서 %f이 단지 0을 인쇄한다는 것입니다.

어쨌든 인쇄 방법에 관계없이 결과는 거의 쓸모가 없습니다. 작은 시간은 알고리즘 측정과 관련이 없으므로 OS의 다른 잡음이 우세합니다.

10 개의 숫자로 이루어진 정렬 시간을 측정해도 결코 중요한 값을 산출 할 수 없습니다. 수천 수백만의 숫자로 시도하십시오. 그리고 최적화가 활성화 된 상태에서 컴파일하는 것을 잊지 마십시오.

+0

예 % i를 사용하더라도 여전히 0이 출력됩니다. –

2

clock()의 해상도가 너무 낮기 때문에 결과는 0입니다. CLOCKS_PER_SEC 틱이고 CLOCKS_PER_SEC은 1000입니다. 예를 들어, 1 초 미만 (1 밀리 초 미만)으로 실행됩니다.

+0

네, OP가 좀 더 '0'이 필요합니다. 더 많은 가치, 더 많은 종류. 100/100, 아마도. –

+0

당신은 무엇을 제안합니까? CLOCKS_PER_SEC을 (를) 변경할 수 있습니까? –

+0

백만 회 루프. CLOKS_PER_SEC은 변경할 수 없습니다. 그것이 바로 하드웨어입니다. –